Lesson Seven 2018-04-20 01:19:00
//可变个数的形参
//1.格式:对于方法的形参:数据类型...形参名 public void c(int i, String ... args)
//2.可变个数的形参的方法与同名的方法之间构成重载
//3.可变个数的形参在调用时,个数从0开始,没有上限
//4.使用可变多个形参的方法 与 方法的形参使用数组是一样的。。。。。。。。。。。。。。。
//5.若方法中存在可变个数的形参,一定要声明在方法形参最后
//6.在一个方法中,最多声明一个可变个数的形参
1 class TestArgs { 2 public void a() { 3 System.out.println("aaa"); 4 } 5 6 public void b(String b) { 7 System.out.println(b); 8 } 9 10 //与上面两个方法构成重载 11 public void c(String agrs[]) { 12 for (int i = 0; i < agrs.length; i++) { 13 System.out.println(agrs[i]); 14 } 15 } 16 //与其它三个方法构成重载 17 public void c(int i, String ... args) { 18 for (int i1 = 0; i1 < args.length; i++) { 19 System.out.println(args[i]); 20 21 } 22 } 23 24 //不能与其它方法构成重载(方法名不一样!) 25 public void c1(int ... args) { 26 int sum = 0; 27 for (int i = 0; i < args.length; i++) { 28 sum += args[i]; 29 } 30 } 31 }
方法的参数传递(重点,难点)
1.形参:方法声明时,方法小括号内的参数。
实参:调用方法时,实际传入的参数的值。
2.规则: JAVA中的参数传递机制:值传递机制
2.1形参是基本数据类型的,将实参的值,传递给形参的基本数据类型的变量
1 public class Main { 2 public static void main(String[] args) { 3 Main a = new Main(); 4 5 int i = 10; 6 int j = 5; 7 8 System.out.println("i="+i); 9 System.out.println("j="+j); 10 11 a.swap( i, j);//将i和j的值传给swap方法 12 13 System.out.println("i="+i); 14 System.out.println("j="+j); 15 } 16 //形参 把i和j的值传入n和m 17 public void swap(int n, int m) { 18 //逻辑与, 一个数连续 逻辑与 另一个数两次就会等于原来的数 19 // m^n^m 结果为 n 20 n = m^n; 21 m = n^m; 22 n = n^m; 23 } 24 }
PS:以上代码并不能实现两个数想到交换,因为方法内的变量为局部变量,存在于栈中,而类中的变量存在于堆中。当方法执行完成的时候,栈中的变量因为生命周期结束,而被回收。所以两数的值并没有交换。
2.2形参是引用数据类型的,将实参的引用类型变量的值
(对应的堆空间对象的首地址值)传递给形参的引用类型变量
1 public class ArgsTransfer { 2 3 public static void main(String[] args) { 4 ArgsTransfer tt = new ArgsTransfer(); 5 DataSwap ds = new DataSwap(); 6 tt.swap(ds); 7 } 8 9 private void swap(DataSwap ds) { 10 int temp = ds.i; 11 ds.i = ds.j; 12 ds.j = temp; 13 } 14 } 15 16 class DataSwap{ 17 int i = 10; 18 int j = 5; 19 }
PS:以上代码能够实现两个数想到交换,因为引用类型变量中存放的都是堆中的地址,可以直接对堆中的对像实体进行修改
当方法执行完成的时候,虽然栈中的变量因为生命周期结束,而被回收。但因为是对堆中的实体进行修改,所以就算最后被回收了,也能将两数交换
匿名函数
1.当只需要一底价调用类的对象的时候,可以用匿名的方式创建类的对象
2.特点 创建匿名类的对象只能调用一次
3.语法: new 方法名(); 例如: new ArrayTest();
1 public static void main(String[] args) { 2 new StaticAccessNonStatic().info(); 3 4 } 5 public void info() { 6 System.out.println("info方法"); 7 }