JVM 主动类和被动类的使用
2024-08-22 19:01:08
主动使用和被动使用Demo
1、创建工程一个Gradle工程
下一步
下一步
点击完成
2、创建类
public class MyTest1 { public static void main(String[] args) {
System.out.println(MyChild1.str);
}
} class MyParent1{
public static String str = "hello world"; static {
System.out.println("MyParent1 static block");
}
} class MyChild1 extends MyParent1{
static {
System.out.println("MyChild static block");
}
}
输出结果:
MyParent1 static block
hello world
会发现MyChild1的类静态块没有执行。
总结:对于静态字段来说,只有直接定义了该字段的类才会被初始化。
修改后的类:
public class MyTest1 { public static void main(String[] args) {
System.out.println(MyChild1.str2);
}
} class MyParent1{
public static String str = "hello world"; static {
System.out.println("MyParent1 static block");
}
} class MyChild1 extends MyParent1{ public static String str2 = "hello world 2"; static {
System.out.println("MyChild static block");
}
}
执行结果
MyParent1 static block
MyChild static block
hello world 2
因为使用到了MyChild的类,它会被初始化。当一个类在初始化时,要求其父类全部都已经初始化完毕。最终打印结果如上面所示。
3、上面1中,MyChild1没有被实例化,那MyChild类是否有被加载?
-XX:+TraceClassLoading, 用于追踪类的加载信息并打印出来
配置如下:
完整的代码
public class MyTest1 { public static void main(String[] args) {
System.out.println(MyChild1.str);
}
} class MyParent1{
public static String str = "hello world"; static {
System.out.println("MyParent1 static block");
}
} class MyChild1 extends MyParent1{ public static String str2 = "hello world 2"; static {
System.out.println("MyChild static block");
}
}
打印的结果
说明MyChild类也会被加载, 最先加载的是MyTest1类
JVM参数
-XX:+<option>, 表示开启option选项
-XX:+<option> 表示关闭options选项
-XX:<option>=<value>, 表示将option选项的值设置为value
4、首次主动使用例子
public class MyTest4 { public static void main(String[] args) {
MyParent4 myParent4 = new MyParent4();
System.out.println("-------------");
MyParent4 myParent5 = new MyParent4();
}
} class MyParent4{ static {
System.out.println("MyParent4 static block");
}
打印结果:
MyParent4 static block
-------------
说明在创建MyParent4 对象的时候,会初始化MyParent4, 但是第二次创建MyParent4的时候,就不会初始化MyParent4。所有只在主动首次使用才会初始化。
最新文章
- C#写爬虫,版本V2.1
- androi手机解锁引导程序
- Liferay7 BPM门户开发之44: 集成Activiti展示流程列表
- 在实例中说明java的类变量,成员变量和局部变量
- ios 客户端定位的3种方法
- HDU 4405 (概率DP)
- Android--用DownLoadManager下载完成后启动安装
- 每天一个Linux命令(2): ls
- Old Calculator
- ajax post提交数据, input type=submit 返回prompt aborted by user
- C语言程序设计做题笔记之C语言基础知识(下)
- Java多线程初学者指南(5):join方法的使用
- 用脚本安装IIS
- 给定一个无序数组arr,求出需要排序的最短子数组长度。例如: arr = [1,5,3,4,2,6,7] 返回4,因为只有[5,3,4,2]需要排序。
- centos 7 &;&; dotnet core 2.0 &;&; nginx &;&; supervisor
- 【译】巧用CSS变量实现自动前缀
- c语言程序设计第4周编程练习(素数和)
- vmstat命令参数介绍
- 基于墨刀实现的购物app
- Codeforces Round #207 (Div. 1) A. Knight Tournament (线段树离线)