1.数组的定义
1. int[] a1;(这一种格式或许更合理,毕竟它表明类型是“一个int型数组”)
2. int a1[];
2.数组的创建及初始化
1、静态初始化: 程序员在初始化数组时为数组每个元素赋值;
2、动态初始化: 数组初始化时,程序员只指定数组的长度,由系统为每个元素赋初值。
代码如下:
public class ArrayInit {
public static void main(String[] args) {
//静态初始化数组:方法一
String cats[] = new String[] {
"Tom","Sam","Mimi"
};
//静态初始化数组:方法二
String dogs[] = {"Jimmy","Gougou","Doggy"};
//动态初始化数据
String books[] = new String[2];
books[0] = "Thinking in Java";
books[1] = "Effective Java";
System.out.println(cats.length);
System.out.println(dogs.length);
System.out.println(books.length);
}
}
int[] a1 = {1,2,3,4,5}是一种特殊的初始化表达式,它必须在创建数组的地方出现,在这种情况下存储空间的分配(等价于使用new)将由编译器负责。
数组创建的时候,数组中的基本数据类型会自动初始化为空值(对于数字和字符是0,对于布尔值是false)
3.数组的使用
public class ArrayInit {
public static void main(String[] args) {
Integer[] a = {
new Integer(1),
new Integer(2),
3,
};
Integer[] b = new Integer[] {
new Integer(1),
new Integer(2),
3,
};
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}
在这两种形式中,初始化列表的最后一个逗号都是可选的(这一特性使维护长列表变得更容易)
4.可变列表
public class NewVarArgs {
static void printArray(Object... args) {
for (Object obj : args)
System.out.print(obj + " ");
System.out.println();
}
public static void main(String[] args) {
printArray(new Integer(47), new Float(3.14), new Double(11.11));
printArray(47, 3.14F);
printArray("one", "two", "three");
// printArray(new A(), new A(), new A());
printArray((Object[])new Integer[]{1,2,3,4});
printArray();
}
}
- 有了可变列表,就不用显示的编写数组语法了,因为当你指定参数时,编译器实际上会为你填充数组,你获取到的仍然是个数组,这就是为什么可以用foreach来迭代数组的原因。
- 可选参数列表与自动包装机制可以和谐共处
3.可变参数列表传0个参数是可以的。
4.可变参数列表使重载过程变得复杂。
class NewVarArgs2{
static void f(float i,Character... args){
System.out.println("first");
}
static void f(Character... args){
System.out.println("second");
}
public static void main(String[] args) {
f(1,'a');
f('a','b');//编译出错
}
}