首页 > 其他 > 详细

类加载过程

时间:2019-06-05 12:23:33      阅读:95      评论:0      收藏:0      [点我收藏+]

类加载过程:

public class SSClass {
    static {
        System.out.println("SSClass static");
    }
}

public class SuperClass extends SSClass {
    static {
        System.out.println("SuperClass static");
    }
    protected static int value=123;
    public SuperClass(){
        System.out.println("SuperClass 构造函数");
    }
}


/**
 类加载过程:加载、验证、准备、解析、初始化、使用、卸载
 加载:根据全限定类名生成类的二进制字节流类信息,并将其放到方法区
 验证:主要验证二进制字节流是否符合当前虚拟机的要求
 准备:正式为类变量(不包括实例变量)分配内存并设置类变量初始值。如果没有被final修饰的类变量则被初始化为0,null等;如果被final修饰,如
        protected static final int value=123;则被初始化为123
 解析:虚拟机将常量池中的符号引用替换为直接引用
 初始化:类加载过程的最后一步,将静态变量(类变量)设置为给定值;执行静态代码块中的代码
 使用:比如new,会调用构造函数
 */
public class SubClass extends SuperClass {
    private static int a=111;
    static {
        System.out.println("SubClass static");
    }

    public SubClass(){
        System.out.println("SubClass 构造函数");
    }

    public static void m1(){
        int a=0;
        System.out.println(a);
    }

    public static void main(String[] args){
        System.out.println(SubClass.value);//引用父类的静态字段会执行初始化
        System.out.println(SubClass.a);//引用父类的静态字段会执行初始化
        SubClass.m1();//引用父类的静态字段会执行初始化
        SubClass subClass=new SubClass();//执行构造函数
    }
}

输出结果:
SSClass static
SuperClass static
SubClass static
123
111
0
SSClass 构造函数
SuperClass 构造函数
SubClass 构造函数

 如果main()函数中什么都不写,则输出如下:

SSClass static
SuperClass static
SubClass static

 

 

 

类加载过程

原文:https://www.cnblogs.com/BonnieWss/p/10978356.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!