初始化對於類和接口的異同點深刻解析

當Java虛擬機初始化一個類時,要求它的全部父類都已經初始化,可是這條規則不適於接口java

1) 當初始化一個類時,並不會先初始化它所實現的類的接口。blog

2) 在初始化一個接口時,並不會先初始化它的父接口接口

所以,一個父接口並不會由於它的子接口或者實現類的初始化而初始化。只有當程序首次使用特定接口的鏡頭變量時,纔會致使該接口的初始化。虛擬機

 

當初始化一個類時,並不會先初始化它所實現的類的接口 Sampleclass

public class MyTest5 {

    public static void main(String[] args) {
        System.out.println(MyChild5.b);
       
    }
}

interface MyParent5{


    public static Thread thread = new Thread(){
        {
            //實例化代碼塊
            System.out.println("MyParent 5 invoked ");
        }
    };

}

class MyChild5 implements MyParent5{
    public static  int b = 6;

}

  打印結果thread

6

  

若是接接口改成class變量

public class MyTest5 {

    public static void main(String[] args) {
        System.out.println(MyChild5.b);

    }
}

class MyParent5{

  
    public static Thread thread = new Thread(){
        {
            //實例化代碼塊
            System.out.println("MyParent 5 invoked ");
        }
    };

}

class MyChild5 extends MyParent5{
    public static  int b = 6;

}

  那麼就會打印出程序

MyParent 5 invoked 這句話。im

 

 在初始化一個接口時,並不會先初始化它的父接口static

public class MyTest5 {

    public static void main(String[] args) {
  
        System.out.println(MyParent5_1.thread);
    }
}



interface MyGrandpa5_1 {
    public static Thread thread = new Thread(){
        {
            //實例化代碼塊
            System.out.println("MyGrandpa5_1 invoked ");
        }
    };
}

interface MyParent5_1 {
    public static  Thread thread = new Thread(){
        {
            //實例化代碼塊
            System.out.println("MyParent5_1 invoked ");
        }
    };
}

  打印結果

MyParent5_1 invoked 
Thread[Thread-0,5,main]
相關文章
相關標籤/搜索