一:方法
<1> 定义:其实就是完成特定功能的代码块
<2>格式:修饰符 返回值类型 方法名(参数类型 参数1……){
方法体;
return 返回值;
}
格式解释:
A:修饰符 暂时记住public static
B:返回值类型 用于限定返回值的数据类型
C:方法名 为了方便我们调用方法
D:参数类型 用于限定调用方法时传入的数据的数据类型
E:参数名 用于接收调用方法时传入数据的变量
F:方法体 完成功能代码
G:return 结束方法 返回值带给调用者
两个明确:
A:返回值类型 明确功能结果的数据类型
B:明确几个参数,以及参数的数据类型
<3> 方法调用(有明确返回值的调用)
public static int sum(int a,int b){return a+b;}
A:单独调用 sum(10,20) 无意义
B: 输出调用 System.out.println(sum(10,20));
有意义 但不够好
C: 赋值调用 int r = sum(10,20); 推荐使用
<4> 调用方法图解
<5> void修饰方法的调用
若一个方法没有明确的返回值类型,也不能把返回值类型空出来,就写void来表示返回值类型
调用:void修饰的方法只能单独调用
<6>方法重载
在同一个类中,出现了方法名相同的情况,这种情况叫方法重载
特点:
A:方法名相同
B:参数列表相同
(1)参数个数不同
(2)参数对应的数据类型不同,于返回值无关,返回值类型无关
注意:在调用方法的时候,JVM会通过方法参数列表的不同来识别同名方法
<7>方法参数传递问题
(1)基本数据类型方法参数传递
public class ArgsDemo {
public static void main(String[] args) {
// 定义变量
int a = 10;
int b = 20;
System.out.println("a:" + a + ",b:" + b);// a:10,b:20
change(a, b);
System.out.println("a:" + a + ",b:" + b);// a:10,b:20
}
public static void change(int a, int b) { // a=10,b=20
System.out.println("a:" + a + ",b:" + b);// a:10,b:20
a = b; // a=20;
b = a + b;// b=40;
System.out.println("a:" + a + ",b:" + b);// a:20,b:40
}
}
有上面代码的运行结果可以得出结论:方法的参数若是基本数据类型,形式参数(形参)的改变不影响实际参数
实际参数:实际参与运算的变量
形式参数(形参):用于接收实际参数的变量
可是为什么能得出这样的结论:
(2)引用数据类型方法参数传递
public class ArgsDemo2 {
public static void main(String[] args) {
// 定义数组
int[] arr = { 1, 2, 3, 4, 5 };
// 遍历数组
for (int x = 0; x < arr.length; x++) {
System.out.println(arr[x]);
}
System.out.println("----------------");
change(arr);
for (int x = 0; x < arr.length; x++) {
System.out.println(arr[x]);
}
}
public static void change(int[] arr) {
for (int x = 0; x < arr.length; x++) {
// 如果元素是偶数,值就变为以前的2倍
if (arr[x] % 2 == 0) {
arr[x] *= 2;
}
}
}
}
结论:若参数是引用数据类型,形式参数的改变直接影响实际参数
为什么呢?