局部变量不会自动进行初始化,而类变量会
在new出一个对象时,Java会在堆中为此对象分配一个内存块,并将内存块上的数据全部清零。这就是为什么类变量会自动初始化成0和null的原因。
初始化顺序
静态变量—>类变量—>构造方法,且静态变量只初始化一次,类变量可能会初始化多次(eg: 对同一个类new出两个对象时)。
数组的“复制”
把一个数组赋值给另一个数组,其实真正做的只是复制了一个引用。当前一个数组内的值改变时,后一个数组也会改变。
可变参数列表
public class OptionalTrailingArguments {
static void f(int required,String...trailing){
System.out.print(required+" ");
for(String s:trailing){
System.out.print(s+" ");
}
System.out.println("");
}
public static void main(String[] args){
f(1,"one");
f(2,"two","three");
f(3);
}
}
可变参数列表会使重载变得复杂。对于同一个方法f,可变参数列表类型不同,即发生重载。又由于可变参数列表允许不传入参数,所以编译器在遇到f()时不知道该调用哪个方法。推荐做法是,在程序里只出现一个可变参数列表的方法,或者和上面的代码一样,指定一个不可变参数。
枚举类型
enum对象可以在switch语句内使用,是switch的绝佳组合。