一般的初始化
public class BedAndBreakfast {
// initialize to 10
public static int capacity = 10;
// initialize to false
private boolean full = false;
}
当变量值有效且可以写成一行时,便可以在变量初始化的时候同时赋上处值。如果变量的初始化需要一定的逻辑,比如要通过for或者if语句后才能得到初值,那么这种方式不太适合。
类中变量有两种,类变量和实例变量。他们都可以在构造函数中初始化,但是也可以用其他的方式分别对他们初始化,下面将介绍。
静态初始块
static {
// whatever code is needed for initialization goes here
}
静态初始快通过被大括号{}抱含,static来声明。在这里可以执行一定逻辑并对类变量初始化。如果有多处静态初始块,那么他们会按照被定义的顺序执行。在类被类加载器加载的时候静态变量会被初始化(猜的)。
另一种静态变量的初始化是提供一个静态方法来初始化
class Whatever {
public static varType myVar = initializeClassVariable();
private static varType initializeClassVariable() {
// initialization code goes here
}
}
实例变量初始化
和静态变量相似,只是少了static声明。这个代码块的代码实际上会被编译器拷贝到各个构造函数中去,因此实现了在不同构造函数中代码块的共享。
{
// whatever code is needed for initialization goes here
}
当然,也可以通过final方法来初始化实例变量。
class Whatever {
private varType myVar = initializeInstanceVariable();
protected final varType initializeInstanceVariable() {
// initialization code goes here
}
}
非final方法初始化会在变量初始化的时候产生错误。
参考:
https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html