Java 方法
学习方法前建议熟悉我的这一篇文章:
类、对象与方法如何使用(什么是类?什么是对象?什么是方法?) - 小简博客 (janyork.com)https://blog.janyork.com/index.php/archives/447/
常见的方法
System.out.println;
在前面几个章节中我们经常使用到 System.out.println,那么它是什么呢?
我们来分析分析这个输出语句
- println 是一个方法
- System 是系统类
- out 是标准输出对象
这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println
这里只是让大家了解一下,不必去深入刨析这一句话
那么什么是方法呢?
按套路来,先看看理论讲解
Java方法是语句的集合,它们在一起执行一个功能
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
没看懂?,没有关系,这里这是给你了解一下这个理论,后面我们实际演示就可以理解了!
方法的优点
我们现在方法还是一个模糊的概念,但是我们得先讲解它的优点与好处,这样才知道什么情况该使用方法,目的是什么!
- 使程序变得更简短而清晰。
- 有利于程序维护。
- 可以提高程序开发的效率。
- 提高了代码的重用性。
为什么使用方法会让程序很简洁呢?
因为方法全都写在类里面,一个类里面也可以有很多方法,我们只需要在它的主类(程序入口类,即有main方法的类)中调用就可以
为什么使用方法可以提高开发效率呢?
因为方法是可以重复利用的,写一个方法,要用时就可以调用,可以反反复复调用
方法基本的命名规则
方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。他有一个名字,叫驼峰命名法
方法如何创建(定义)
语法:
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
这就是定义一个方法的基本语法,我们一个个点解析
- 先看看修饰符,这个不必详细了解,只要知道修饰符基本都是public就可以,我们就直接public开头
- 返回值类型,我们这里就要提到两个关键词,void与return,这两个可以说时竞争关系,怎么说呢?有void没return,有return没void,不能共存,我们return一般在有参方法里面使用
- 方法名,方法名自己定义,但是按规范来,命名是小写开头,并且使用驼峰命名法!
- 带参数,我们后面有一个(),这个括号里面可以存放参数,格式是这样的,比如我要带一个int类型参数,参数名叫num:(int num)
- 我们后面的{}的用法就不需要说了吧!在{}里面,我们在里面放方法体,其实这个方法体就是代码块,不用管他
理解图示
提示:如果方法没有返回值,那么返回值类型默认是void ,如果有返回值,那么必须用return 返回值,并且该值的数据类型必须是定义方法的数据类型
方法的无参与有参
无参方法:
我们知道,方法是分为无参与有参的
我们先来讲讲无参方法,那么什么是无参方法呢?如何创建(构造)无参方法呢?
我们看看无参方法的样式:
public void one() {
System.out.println("HelloWorld!"); //定义方法
}
这个方法里面是一个输出语句,外面是一个访问修饰符,加一个void返回类型,方法名是one,后面的()内没有任何参数,这就是一个典型的无参方法
说白了,就是()里面没有参数就是无参
有参方法:
我们上面说了,无参就是()里面不带参数的方法,那么我想有参也就好理解了,所谓有参,就是括号里面带参数的方法
当然,我们的重点不是有参与无参是什么,而是怎么使用它!
无参方法使用很简单,创建对象,然后用对象调用方法就可以
其实有参方法的调用也一样,我们先看两给代码:
Demo类:
public class Demo {
public void number(){
System.out.println("无参");
}
public int num(int a,int b){
System.out.println(a+b);
return a+b;
}
}
Dome2(程序入口):
public class Demo2 {
public static void main(String[] args) {
// 创建对象
Demo one = new Demo();
// 调用无参方法
one.number();
// 调用有参方法
one.num(1,3);
}
}
看看这里,我们创建了两个类,一个Demo类,里面存放了两个方法,一个无参一个有参
然后就是Demo2类,这个是main方法入口,我们在这个类里面创建对象(one),并且利用对象调用了两个方法
看看有参方法的调用,实际上除了括号里面,与无参方法调用并无区别
那调用有参方法的()里面为什么要放参数呢?
我们来看看这个有参方法,它的返回类型不是void,也就是我我们需要return返回一个数值
看看我们的有参方法的构成:
public int num(int a,int b){}
这个方法,没有void,()里面带了两个空的 int 类型参数,也就是a与b,并且方法定义的类型是int型,这个地方注意一下,这个地方指定值的类型不对()里面造成影响,但是它对后面值的返回(return)有一些,它限制return的返回类型,我们下面详解,先讲解有参方法
这个方法的()里面的值是对应对象调用方法的()里面的数值,我们看看我们的对象调用:
one.num(1,3);
这个()里面两个值,1和3分别对应对应上面的int a与b,中间用 ,隔开,也就是说,上面()里面有多少个值,那对象的()里面就可以放多少个值
我们这里是int,如果方法是String,就得带上双引号,其他的类型,同理可知
无参有参总结
有参数:小括号当中有内容,当一个方法需要一些数据条件,就是有参数,例如两个数字相乘,必须知道这两个数字各自是多少,才能相加。
无参数:小括号当中留空,一个方法不需要任何数据条件,自己就能独立完成任务,就是无参。例如定义一个方法,打印固定10次HelloWorld。
代码运行图鉴
形参与实参
什么是形参什么是实参呢?
形参 :就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。 形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。 因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。
实参 :就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。
比如:n个,一个,这个n个是一个不知道的参数,我们称为形参,而”一个“是一个具体的参数,参数值是1,所以”1个“是实参
再举个例子,就像我们上面的方法()里面的int a与int b,这是形参,但是对象调用方法时()里面的1,3是具体的参数,所以是实参
void关键词详解
著我们上面的那个无参方法是用void返回的,那么void到底是什么意思呢?
其实void就是无返回的意思,你也可以理解成无需返回,也就是说这个方法里面没有要返回的参数,或者这个方法里面的代码不需要返回
这个了解一下,只要知道它怎么使用就可以
return关键词的作用
我们上面提到了return关键词,它的作用是返回一个值,那他具体是怎么返回的呢?
return的常用作用有以下两种:
- 返回方法指定类型的值(这个值总是确定的),也可以是对象
- 结束方法,终止“return;”后面代码的执行
第二个就像break一样,直接停止运行下面的代码
我们主要是看他第一种,怎么返回的呢?我们来看看他怎么返回的
我们定义一个String类型的方法:
public string functionTest(){
String a = "abc";
return a;
}
这里没有输出语句,但是它使用return返回了一个a的值,并且a有一个String值为abc 我们调用一下
public class Test{
public static void main(){
string result = functionTest();
System.out.println(result);
}
}
注意:我这里是方法与入口main方法都写在了同一个类中,所以调用方法不需要对象,直接:方法名()
我们将functionTest这个方法赋值给result,这时,functionTest方法里面用return返回的a就被赋值到result了
然后,输出result,输出结果是:abc
方法重载
方法重载其实很简单,不要去书面研究了解,我们直接看代码
代码:
Demo类:
public class Demo {
public void loop(String a){
System.out.println(a);
}
public void loop(int a){
System.out.println(a);
}
public void loop(char a){
System.out.println(a);
}
}
Demo2类:
public class Demo2 {
public static void main(String[] args) {
Demo jan = new Demo();
jan.loop(1);
jan.loop("字符串");
jan.loop('a');
}
}
这里,我们先看Demo类里面的代码,这里有三个方法,注意,三个方法名字相同,都是loop,()里面的变量名也一样,都是a
但是,注意,我们的方法的()里面的值的类型不同,三个方法分别是int、String、char类型,这样就构成了方法重载
说的简单一点,就是方法名相同,返回类型相同()里面变量名相同,就只有()里面的变量类型不同,注意:或者也可以返回值类型相同,里面的变量个数不同
这样,这三个方法就构成了重载,不要去过于关注重载是什么,我们来看看运行就知到了
我这里是创建一个对象,对象调用了loop这个方法,我这里调用三次是为了更好对比
jan.loop(1);
jan.loop("字符串");
jan.loop('a');
注意:我们这上面是一种,我们看看下面,当变量类型相同,里面的变量个数不同也可以构成方法重载哦!
public void loop(char a){
System.out.println(a);
}
public void loop(char a,char b){
System.out.println(a);
}
当你再()里输入字符串类类型(要有“ ”符号),他就会是自动使用我们那三个方法中的字符串类型方法 如果还不懂,可以复制我代码试试,就明白了!
方法中变量作用域(范围)
方法里面定义的变量是局部变量,局部变量的作用范围只能再这个变量所在的方法里面,不能用于其他方法与类!
构造方法
- 当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
- 通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。
- 不管你是否自定义构造方法,所有的类都有构造方法,因为Java会自动提供了一个默认构造方法,默认构造方法的访问修饰符和类的访问修饰符相同(类为public构造函数也为public;类改为protected构造函数也改为protected)。
- 一旦你定义了自己的构造方法,默认构造方法就会失效。
先看看上面了解一下构造方法,那很多人问:以前创建方法的时候为什么没有要构造方法呢?
因为我们的Java会自动提供一些基本的默认的构造方法,一旦你没构造方法,就会自动使用Java提供的构造方法,如果你自己构造了方法,那就会使用你创建的构造方法
那么,构造方法有什么用呢?
嘿嘿,这个后面再讲!/偷笑