类的加载连接以及初始化

类加载

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("我是子类哦!!!");
    }
}

输出结果

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

猜你喜欢

转载自www.cnblogs.com/waibizi/p/12113917.html