Java基础——可变参数
大家都知道main方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型。我试了试,并调用了一些弹出来的方法。
public class ClassC2 { public static void main(String...args) { System.out.println(args.getClass()); //Exception in thread "main" class [Ljava.lang.String; System.out.println("======分割线1====="); System.out.println(args.hashCode()); //4126736 System.out.println("======分割线2====="); System.out.println(args.toString()); System.out.println("======分割线3====="); //[Ljava.lang.String;@3ef810 System.out.println(args.length); //0 System.out.println("======分割线4====="); args.notify(); //java.lang.IllegalMonitorStateException } }
嗯,我把Sting后面的“[ ]”换成了三个点(...),这三个点代表Java中的可变数组参数。可变的参数类型(variable argument type),也称为不定参数类型。英文缩写是varargus。也就是说,这个方法在接收参数的时候,个数是不定的。
public class ClassC { public static void main(String[] args) { String[] array = { "Java", "PHP", "C#" };//传数组 test(array);//调用 } static void test(String... a) { //利用可变参数的栗子 System.out.println(a);// 打印:[Ljava.lang.String;@da6bf4 System.out.println(a.length);//3 for (int i = 0; i < a.length; i++) { // for遍历 System.out.print(a[i]+"\t");//方便记录,我用了让它一行输出的效果:Java PHP C# } } }
//不像上面那样调用也可以,下面再演示几种调用方法 public class ClassC { public static void main(String[] args) { test();//没有赋值,直接调用 } static void test(String... a) { //利用可变参数的栗子 System.out.println(a);// 打印:[Ljava.lang.String;@1e58cb8 System.out.println(a.length);//0 for(String s:a){ //复习一下增强for System.out.println(s); } } }
//不像上面那样调用也可以,下面再演示几种调用方法 public class ClassC { public static void main(String[] args) { // new一个空数组 test(new String[0]); } static void test(String... a) { // 利用可变参数的栗子 System.out.println(a);// 打印:[Ljava.lang.String;@1e58cb8 System.out.println(a.length);//0 for (String s : a) { // 复习一下增强for System.out.println(s); } } }
//不像上面那样调用也可以,下面再演示几种调用方法 public class ClassC { public static void main(String[] args) { test(new String[]{"张三","李四","王五"}); } static void test(String... a) { // 利用可变参数的栗子 System.out.println(a);// 打印:[Ljava.lang.String;@b9e45a System.out.println(a.length);//3 for (String s : a) { // 复习一下增强for System.out.print(s+"\t");//张三 李四 王五 } } }
由此可见,将参数定义为可变参数,有一下两个有点:
1.不必担心将来在调用的时候,去迎合之前定义的参数;
2.没想出来
(我只想这些,欢迎补充)