JVM学习笔记8:接口初始化与类加载器准备阶段和初始化阶段的重要意义分析

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值