码迷,mamicode.com
首页 > 其他好文 > 详细

类的加载连接以及初始化

时间:2019-12-29 10:46:51      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:extend   package   stat   测试的   parent   创建   end   部分   main   

类加载

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

 

输出结果

技术图片

 

 

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

类的加载连接以及初始化

标签:extend   package   stat   测试的   parent   创建   end   部分   main   

原文地址:https://www.cnblogs.com/waibizi/p/12113917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!