类的加载连接以及初始化

Posted waibizi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的加载连接以及初始化相关的知识,希望对你有一定的参考价值。

类加载

JAVA程序对于类的使用可以分为两个方式:

    一:主动使用

    二:被动使用

 

JAVA程序只有对类时主动使用,才完成类的初始化

 

那?怎么才算对类的初始化呢?

    以下便是对类的初始化几个类型

  1. 创建类的实例
  2. 访问某个类或接口的静态变量,或者对该静态变量赋值
  3. 调用类的静态方法
  4. 反射
  5. 初始了继承该类的子类
  6. JAVA虚拟机启动的时候就已经注明为启动的类

 

说完了主动使用,还差被动使用呢?为了顺便理解一部分主动加载,可以看下面的代码哦

 

package com.waibizi;

public class demo01 {

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

}

class parent{
    static String test = "我只是测试的";
    
    static {
        System.out.println("我是父类哦!!!");
    }
}

class children extends parent{
    
    static {
        System.out.println("我是子类哦!!!");
    }
}

结果

技术图片

 

 我们可以看到,子类的输出打并没有反应,结论:通过子类去访问父类,并没有将子类初始化,也就是说并没有使用到子类,即子类为被动使用,被动使用是不初始化类的

但是作为父类的类,此时因为调用到了其中的静态变量,所以导致父类进行了初始化。

 

我们再继续看以下的代码

 

package com.waibizi;

public class demo01 {

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

}

class parent{
    static String test = "我只是测试的";
    
    static {
        System.out.println("我是父类哦!!!");
    }
}

class children extends parent{
    static String test = "我只是子类测试的";
    static {
        System.out.println("我是子类哦!!!");
    }
}

 

输出结果

技术图片

 

 

从结果我们得到的结论便是,子类初始化了,也会使父类一起初始化。

以上是关于类的加载连接以及初始化的主要内容,如果未能解决你的问题,请参考以下文章

JAVA类的生命周期,以及类的初始化时机

java类的加载以及初始化顺序 .

(二十六)类加载机制和类的加载连接(验证准备解析)和初始化

类的加载

类的加载

类的加载机制