1、在接口中變量默認是 public static final的,所以可以不寫,點擊會發下報冗餘
package com.shengsiyuan.jvm.classloder;
import java.util.Random;
//當一個接口在初始化的時候,並不要求其父接口都完成了初始化
//只有在真正使用到父接口的時候(如引用接口中所定義的常量時),纔會初始化
public class MyTest5 {
public static void main(String[] args) {
System.out.println(MyChild5.b);
}
}
interface MyParent5 {
//public static final int a=5;//在接口中變量默認是 public static final的,所以可以不寫,點擊會發下報冗餘
public static final int a=new Random().nextInt(5);
}
interface MyChild5 extends MyParent5{
public static final int b= new Random().nextInt(4);
//public static final int b=6;
}
2、調用類的靜態方法,準備階段爲靜態變量附上初值,還沒有初始化,接下里初始化,靜態方法和靜態變量沒有先後順序的【我經常認爲先靜態變量再靜態方法,wrong】,順着來就可以了。
package com.shengsiyuan.jvm.classloder;
public class MyTest6 {
public static void main(String[] args) {
Singleton singleton=Singleton.getInstance();//調用類的靜態方法,準備階段爲靜態變量附上初值(singleton=null),還沒有初始化,接下里初始化,靜態方法和靜態變量沒有先後順序的【我經常認爲先靜態變量再靜態方法,wrong】,順着來就可以了。
System.out.println("counter1 : "+singleton.counter1);
System.out.println("counter2 : "+singleton.counter2);
}
}
class Singleton{
public static int counter1;
//public static int counter1=1; //2try輸出結果爲2、0
//public static int counter2=0; //1try輸出結果都是1
private static Singleton singleton=new Singleton();
public static int counter2=0;//輸出結果一個是1,一個是0
private Singleton(){
counter1++;
counter2++;//準備階段的重要意義
System.out.println(counter1);
System.out.println(counter2);
}
public static Singleton getInstance(){
return singleton;
}
}
努力學習ing