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