方法的参数传递


 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     }
匿名函数

 

posted @ 2018-04-20 02:10  此人有病  阅读(952)  评论(0编辑  收藏  举报