数组初始化 可变参数

数组的初始化

写在开始的话”:重构即重写代码,以使得它更可读、更容易理解,并因此更具有维护性。软件最大的投入到了代码的维护上,所以磨刀不误砍柴工。

数组只是相同类型的、用一个标识符名称封装到一起的对象序列或基本类型数据序列。

数组有三种初始化方式

第一种

Integer[] a = new Integer[20];

它现在还只是一个引用数组,直到通过创建新的Integer对象,并把对象赋值给引用,初始化进程才算结束。要是基本类型,会自动初始化成空值。

另外,打印数组时,可使用数组工具类import java.util.Arrays;  Arrays.toString()方法答应,或自己重写toString()方法。

第二种

Integer[] a = {new Integer(2),new Integer(3)};

第三种

Integer[] a = new Integer[]{new Integer(2),new Integer(3),};

在后边两种初始化列表的最后一个逗号都是可选的,这一特性维护长列表变得更容易

尽管第一种形式很有用,当他也更加受限,因为只能用于数组被定义之处,你可以在任何地方使用第二种和第三种形式,甚至在方法调用的内部。

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {

   public static void main(String[] args) {
      SpringApplication.run(EurekaApplication.class, args);
      Other.main(new String[]{"fiddle","de ","dum"});
   }

}
class  Other {
   public static void main(String[] args) {
      for(String s:args)
         System.out.print(s+"  ");
   }
}

结果

fiddle  de   dum  

从这个例子中可以看出  public 是主程序如口的函数,并且和程序名相同,并且只能有一个

PublicOther只是一个普通的函数

Other.main() 的参数而创建的数组时在方法调用处创建的。

可变参数列表

public class EurekaApplication {

   public static void main(String[] args) {
      SpringApplication.run(EurekaApplication.class, args);
      Other.main("fiddle","de ","dum");
      Other.main("one","two");
      Other.main("1","2");
      Other.main();

   }

}
class  Other {
   public static void main(Object... args) {
      for(Object s:args){
         System.out.print(s+"  ");
      }
      System.out.println();
   }
}

结果

fiddle  de   dum  

one  two  

1  2  

有了可变参数,就再也不用显示的编写数组语法了。当你指定参数时,编译器实际会为你去填充数组,你获得的仍旧是一个数组,这就是为什么Print()可以使用foreach来迭代该数组的原因。当是这不仅仅是从元素列表到数组的自动转换。最后一行程序表明将0个参数传递给可变参数列表是可行的。

可变参数列表变为数组的情况,并且如果在该列表中没有任何元素,那么转变成的数据的尺寸为0.

   System.out.println(new Integer[]{1}.getClass());
   System.out.println(new int[]{1}.length);
   System.out.println(new int[0].getClass());

class [Ljava.lang.Integer;

1

class [I

System.out.println(new Integer(2).getClass());

class java.lang.Integer

getClass()方法属于Object的一部分,他将产生对象的类,并且在打印该类时,可以看到表示该类类型的编码字符串。前导的“[”表示这是一个后边紧随的类型的数组,而紧随的“I”表示基本类型int。使用可变参数列表不依赖自动包装机制,而实际上使用的事基本类型。可以在单一的参数列表中将类型混合在一起,而自动包装机制将有选择的将int参数提升为Integer

可变参数列表使得重载过程变的复杂了。

所以你给这重载方法都添加一个非可变参数,就可以避免错误。

猜你喜欢

转载自blog.csdn.net/fwk19840301/article/details/79369569