创建如下Demo

package com.example.jvm.classloader;

class Parent{
static int a = 3; static {
System.out.println("Parent static block");
}
} class Child extends Parent{
static int b = 4; static {
System.out.println("Child static block");
}
} public class MyTest9 {
static {
System.out.println("MyTest9 static block");
} public static void main(String[] args) { System.out.println(Child.b);
}
}

  运行结果

MyTest9  static block
Parent static block
Child static block
4

  

创建Demo2

package com.example.jvm.classloader;

class Parent2{
static int a = 3; static {
System.out.println("Parent2 static block");
}
} class Child2 extends Parent2{ static int b = 4; static {
System.out.println("Child2 static block");
} }
public class MyTest10 {
static {
System.out.println("MyTest10 static block"); //静态块被打印,说明该类被初始化了。
} public static void main(String[] args) { Parent2 parent2; System.out.println("______________"); parent2 = new Parent2(); System.out.println(parent2.a); System.out.println("______________"); System.out.println(Child2.b); } }

  打印结果:

MyTest10 static block
______________
Parent2 static block
3
______________
Child2 static block
4

  

创建Demo3

class Parent3{
static int a = 3; static {
System.out.println("Parent3 static block");
} static void doSomething(){
System.out.println("do something");
}
} class Child3 extends Parent3{ static int b = 4; static {
System.out.println("Child3 static block");
} }
public class MyTest11 { public static void main(String[] args) { //变量定义在哪里,就是对哪个类的主动使用。如a定义在Parent3中,那就是对Parent3的主动使用
System.out.println(Child3.a);
System.out.println("-----------"); //静态方法定义在哪里,就是对哪个类的主动使用。如doSomething定义在Parent3中,那就是对Parent3的主动使用
Child3.doSomething(); } }

  打印结果

Parent3 static block
3
-----------
do something

  

4、Demo4 使用反射使类初始化

class CL{

    static {
System.out.println("CL static block");
} }
public class MyTest12 { public static void main(String[] args) throws Exception{
ClassLoader loader = ClassLoader.getSystemClassLoader();
Class<?> clazz = loader.loadClass("com.example.jvm.classloader.CL"); System.out.println(clazz); System.out.println("-------------"); clazz = Class.forName("com.example.jvm.classloader.CL"); System.out.println(clazz);
}
}

  打印结果

class com.example.jvm.classloader.CL
-------------
CL static block
class com.example.jvm.classloader.CL

  说明反射Class.forName会使类初始化。而调用ClassLoader类的loadClass方法加载一个类,并不是对类的主动使用,不会导致类的初始化

JVM 初始化阶段例子的更多相关文章

  1. JVM 初始化阶段例子 final常量

    1.创建FinalTest类,里面有一个final常量x class FinalTest{ public static final int x = 3; static { System.out.pri ...

  2. JVM 初始化阶段的重要意义分析

    1.创建一个Mytest6类和Singleton类 public class MyTest6 { public static void main(String[] args) { Singleton ...

  3. 深入理解JVM-类加载初始化阶段-类的主动与被动引用

    JVM的类加载阶段中初始化阶段 P210 虚拟机规定的五种情况必须对类的“初始化”情况 1.遇到new.getstatic.putstatic.或invokestic 四条字节码指令时,如果类没有经过 ...

  4. React组件生命周期-初始化阶段的函数执行顺序

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  5. junit源码解析--初始化阶段

    OK,我们接着上篇整理.上篇博客中已经列出的junit的几个核心的类,这里我们开始整理junit完整的生命周期. JUnit 的完整生命周期分为 3 个阶段:初始化阶段.运行阶段和结果捕捉阶段. 这篇 ...

  6. react初始化阶段

    初始化阶段可以使用的函数:getDefaultProps:只调用一次,实例之间共享引用.只有在组件的第一个实例被初始化的时候,才会调用他,然后react会把这个函数的返回结果保存起来,从第二个实例开始 ...

  7. 【译】x86程序员手册40-10.5初始化的例子

    10.5 Initialization Example初始化的例子 译注:本来想把这个例子全部注释完,但由于对intel汇编实不熟悉,有太多的伪指令,本人也是免强看懂,所以就不再做翻译了. $TITL ...

  8. openresty开发系列32--openresty执行流程之1初始化阶段

    openresty开发系列32--openresty执行流程之初始化阶段 一)初始化阶段 1)init_by_lua   init_by_lua_block     init_by_lua_file语 ...

  9. 一起学习vue源码 - Vue2.x的生命周期(初始化阶段)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

随机推荐

  1. 阿里云服务器远程连接错误:由于一个协议错误(代码:0x112f),远程会话将被中断。

    2019年10月,阿里云服务器远程连接忽然无法登录.当时正在清理c盘空间,C盘只剩下30+M,忽然远程桌面掉线,以为断网了,再次远程桌面连接时,就出现一下错误. 解决方案:万能的重启!!!具体错误原因 ...

  2. Linux kernel启动选项(参数)

    在Linux中,给kernel传递参数以控制其行为总共有三种方法: 1.build kernel之时的各个configuration选项. 2.当kernel启动之时,可以参数在kernel被GRUB ...

  3. CentOS7安装与优化

    原文地址:https://www.cnblogs.com/blsnt/p/9556946.html

  4. (Linux基础学习)第六章:查询与修改系统的本地化(locale)与键盘布局的设置(locelectl)

    第1节:可查询与修改系统的本地化(locale)与键盘布局的设置[root@centos7 ~]# localectl System Locale: LANG=en_US.UTF-8 VC Keyma ...

  5. cesium-print 动态打印插件

    Cesium 动态打印插件 cesium-print is a plugin for cesium printing Usage Include it in your code after impor ...

  6. centos7安装redis 并配置在后台启动

    官网  https://redis.io/download 先进入 目录 /usr/local 1 下载文件包 $ wget http://download.redis.io/releases/red ...

  7. LGOJP2831 愤怒的小鸟

    题目链接 题目链接 题解 数据范围显然状压/爆搜. 考虑\(f[S]\)表示二进制下已打了的猪的集合. 可以枚举\(S\)的子集\(S_1\),判定\(S\)中\(S_1\)的补集\(S_2\)是否合 ...

  8. python中的logging日志模块

    日志是程序不可或缺的一部分.它可以记录程序的运行情况,帮助我们更便捷地发现问题,而python中的logging日志模块给我们提供了这个机会. logging给我们提供了五种函数用来输出日志:debu ...

  9. canvans知识点

    1.绘制圆的角度示意图: 2 倒计时中,时钟数字的渲染逻辑: 3 直线边缘样式的设置 context.lineCap = "butt"; context.lineCap = &qu ...

  10. HDU - 3555 - Bomb(数位DP)

    链接: https://vjudge.net/problem/HDU-3555 题意: The counter-terrorists found a time bomb in the dust. Bu ...