主动使用和被动使用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。所有只在主动首次使用才会初始化。

												

最新文章

  1. C#写爬虫,版本V2.1
  2. androi手机解锁引导程序
  3. Liferay7 BPM门户开发之44: 集成Activiti展示流程列表
  4. 在实例中说明java的类变量,成员变量和局部变量
  5. ios 客户端定位的3种方法
  6. HDU 4405 (概率DP)
  7. Android--用DownLoadManager下载完成后启动安装
  8. 每天一个Linux命令(2): ls
  9. Old Calculator
  10. ajax post提交数据, input type=submit 返回prompt aborted by user
  11. C语言程序设计做题笔记之C语言基础知识(下)
  12. Java多线程初学者指南(5):join方法的使用
  13. 用脚本安装IIS
  14. 给定一个无序数组arr,求出需要排序的最短子数组长度。例如: arr = [1,5,3,4,2,6,7] 返回4,因为只有[5,3,4,2]需要排序。
  15. centos 7 &amp;&amp; dotnet core 2.0 &amp;&amp; nginx &amp;&amp; supervisor
  16. 【译】巧用CSS变量实现自动前缀
  17. c语言程序设计第4周编程练习(素数和)
  18. vmstat命令参数介绍
  19. 基于墨刀实现的购物app
  20. Codeforces Round #207 (Div. 1) A. Knight Tournament (线段树离线)

热门文章

  1. 在vue中使用jsx语法
  2. ICS2019汇编实验在Linux下使用GDB调试程序
  3. Java 使用Builder解决构造函数参数过多的问题
  4. PAT-2019年冬季考试-乙级(题解)
  5. java请求url可以带参数
  6. python3 生成二维码并存入word文档
  7. 《BUG创造队》作业8:软件测试与Alpha冲刺(第三天)
  8. nginx添加系统服务(start|stop|restart|reload)
  9. mysql 端口号被占用
  10. python logging 重定向print(标准输入输出)