类加载
JAVA程序对于类的使用可以分为两个方式:
一:主动使用
二:被动使用
JAVA程序只有对类时主动使用,才完成类的初始化
那?怎么才算对类的初始化呢?
以下便是对类的初始化几个类型
- 创建类的实例
- 访问某个类或接口的静态变量,或者对该静态变量赋值
- 调用类的静态方法
- 反射
- 初始了继承该类的子类
- 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("我是子类哦!!!"); } }
输出结果
从结果我们得到的结论便是,子类初始化了,也会使父类一起初始化。
原文地址:https://www.cnblogs.com/waibizi/p/12113917.html
时间: 2024-10-11 09:09:57