一、方法
1、方法的分类
静态方法—》类方法 有static修饰
成员方法—》实例方法 没有static修饰
2、方法执行过程
栈内存:方法运行的区域
堆内存:数据存放的区域
方法区:java代码存放的区域
当主方法调用其他方法时如a方法,a方法的代码会被加载进栈内存执行 当方法执行结束后,栈内存中会自动清除a方法,但是方法区中的a方法依然在。
3、按值传递和按引用传递
参数分为两种:形参
和 实参
即按值传递和按引用传递
按值传递
此时复制的是值,不是值的引用地址
修改a对x没有影响
按引用传递
实参传递给形参的不是真实的数据,是数据所在的地址。就会造成实参和形参指向的是内存中同一个数据,事实上,这是同一个数据
当参数是基本数据类型时,数据不占用堆内存,是按值传递;当参数是引用类型时,数据会占用堆内存,按引用传递
应用
public class Day2 {
public static void main(String[] args) {
int[] a={9,8,7,6,5,4,3,2,1};
sort(a);
for (int x:a) {
System.out.print(x+",");
}
}
/**
* 定义一个方法,对一个整数类型的数组进行升序排序
* @param arr 要排序的数组
*/
1. List item
public static void sort(int[] arr){
Arrays.sort(arr);
}
}
4、可变参数
public static void main(String[] args) {
int[] a={9,8,7,6,5,4,3,2,1};
int x=1;
int y=2;
int z=3;
showArray(x,y,z);//可以传单个变量
showArray(a);//也可以传一个数组
}
/**
*
* @param arr 使用三点运算符时,可以传递n个参数,且都被存在arr数组中
*/
public static void showArray(int... arr){
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
但是可变参数的使用是有要求的
注意事项
// 1.可变参数只能放在参数列表的最后一个参数
// 2.一个方法的参数列表只能有一个可变参数
5、方法的重载overload
概念引入
定义一个方法求两个整数的和
定义一个方法求两个byte变量的和
定义一个方法求两个short变量的和
…
上述的方法可以归为一类,他们的功能相同或相似,但是他们需要的参数是不同的
使用重载的要求?
在一个类中方法重名是可以的,方法名必须相同,参数列表一定不能相同,他会根据你的实参列表匹配多个同名方法中的某一个方法
参数可以有哪些不同?
1、个数不同
2、个数相同,类型相同,排列顺序不同
3、个数相同,类型不同
特殊的三点运算符
三点运算符和数组重载时也是会出错的,因为他俩本质上都是一个数组