JAVA初始化顺序小例子
最近看了一下JAVA的基础,发现差距还是不小啊!
举个最简单的例子,下面我们就来研究一下JAVA的初始化机制!
见程序:
public class Exp {
public static void main (String args[]){
System.out.println("Inside main()");
// Cups.cup1.f(99);
Cups cups = new Cups();
}
}
class Cups{
Cups(){
System.out.println("Cups()");
}
static Cup cup1;
static Cup cup2;
static{
cup1 = new Cup(1);
cup2 = new Cup(2);
}
}
class Cup{
Cup(int marker){
System.out.println("cup(" + marker + ")");
}
Cup(){
System.out.println("CUP的构造方法");
}
void f(int marker){
System.out.println("f(" + marker + ")");
}
}
Output:
Inside main()
Cup(1)
Cup(2)
F(99)
非常简单的一段小程序,一个有三个类,一个主类,一个CUPS ,一个CUP,在主类中,我们就是创建了一个CUPS的对象,大家都知道 类创建的顺序应该是 先构造静态的对象,(初始化静态变量和对象),然后再去初始化普通的对象,当然也是先初始化变量再去构造方法,再执行普通的方法的顺序!
言归正传,当我们初始化CUPS这个类的时候,一下这种写法不知道大家用没用过,其实就是跟在static变量后的一段代码,也就是静态初始化的一种写法,所以说我们就要先去执行这一段代码!
static{
cup1 = new Cup(1);
cup2 = new Cup(2);
}
在执行的过程中,要创建CUP(1)的构造方法,所以我们需要去执行CUP(int n)的构造方法,这就正常输出了!
在这里需要提醒的一点就是,静态的对象和变量只会初始化一次,当第二次再调用的时候就不用再次进行初始化了!
只要是有以下这种写法,那种普通的构造方法就不会再去执行了!
static{
cup1 = new Cup(1);
cup2 = new Cup(2);
}
BUT 这里要重点强调的是如下
static{
cup1 = new Cup(1);
cup2 = new Cup(2);
}
Cups(){
System.out.println("Cups()");
}
{
cup1 = new Cup(1);
cup2 = new Cup(2);
}
Cups(){
System.out.println("Cups()");
}
以上两种是有区别的,第一种 有static的构造方法 Cups(){} 是不会去执行的
第二种 没有static 的 构造方法会在{cup1 = new Cup(1);cup2 = new Cup(2);}
执行完成之后,再去执行构造方法 Cup(){}
浙公网安备 33010602011771号