创建如下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. 1-Spark-1-性能调优-数据倾斜1-特征/常见原因/后果/常见调优方案

    数据倾斜特征:个别Task处理大部分数据 后果:1.OOM;2.速度变慢,甚至变得慢的不可接受 常见原因: 数据倾斜的定位: 1.WebUI(查看Task运行的数据量的大小). 2.Log,查看log ...

  2. 绘图 Matplotlib Numpy Pandas

    丈夫气力全,一个拟当千.猛气冲心出,视死亦如眠. 绘图 Matplotlib可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法. 能将数据进行可视化,更直观的呈现使数据更 ...

  3. onvirt安装linux系统

    情况说明: (1)本文接前文kvm虚拟化学习笔记(十九)之convirt集中管理平台搭建,采用convirt虚拟化平台安装linux操作系统的过程,这个过程中需要对convirt进行一系列的配置才能真 ...

  4. yarn 错误There appears to be trouble with your network connection. Retrying...

    原因:yarn超时 解决途径:1.安装好后更换淘宝镜像 yarn config set registry https://registry.npm.taobao.org

  5. 洛谷 P1280 尼克的任务题解

    题目链接:https://www.luogu.org/problem/P1280 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每 ...

  6. 在linux上搭建SVN服务器并自动更新至WEB目录

    1.仓库放在 /var/svn/ 目录下,并且仓库名为 project 2.创建用户组user,该组下添加两个成员user1.user2,密码直接用用户名,两用户可以checkout代码和提交代码 3 ...

  7. Kotlin编译器优化与when关键字详解

    Any类型: 定义一个函数,其参数接受所有类型,对于Java而言Object是所有类的基类,而在Kotlin中得用Any关键字,如下: 其中瞅一下该Any字段是个啥类型: 然后里面做一些判断: 这是因 ...

  8. SVM:从数学上分析为什么优化cost function会产生大距离(margin)分类器

    向量内积 uTv = vTu为两个二维向量的内积,它等于p*||u||(其中p为向量v在向量u上的投影长度,是有+/-之分的,||u||为向量u的长度也称为范数),它是一个实数(是一个标量). 如上图 ...

  9. JQuery系列(1) - 选择器、构造函数、实例方法

    概述 JQuery是一个JavaScript库,jQuery的核心思想是“先选中某些网页元素,然后对其进行某种处理”(find something, do something),也就是说,先选择后处理 ...

  10. vscode——配置go插件

    前言 这个真的折腾死我了,看了N多博客才弄好 这两个还是比较有用的~ https://www.cnblogs.com/nickchou/p/9038114.html https://www.jians ...