JVM 初始化阶段例子
创建如下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 初始化阶段例子的更多相关文章
- JVM 初始化阶段例子 final常量
1.创建FinalTest类,里面有一个final常量x class FinalTest{ public static final int x = 3; static { System.out.pri ...
- JVM 初始化阶段的重要意义分析
1.创建一个Mytest6类和Singleton类 public class MyTest6 { public static void main(String[] args) { Singleton ...
- 深入理解JVM-类加载初始化阶段-类的主动与被动引用
JVM的类加载阶段中初始化阶段 P210 虚拟机规定的五种情况必须对类的“初始化”情况 1.遇到new.getstatic.putstatic.或invokestic 四条字节码指令时,如果类没有经过 ...
- React组件生命周期-初始化阶段的函数执行顺序
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- junit源码解析--初始化阶段
OK,我们接着上篇整理.上篇博客中已经列出的junit的几个核心的类,这里我们开始整理junit完整的生命周期. JUnit 的完整生命周期分为 3 个阶段:初始化阶段.运行阶段和结果捕捉阶段. 这篇 ...
- react初始化阶段
初始化阶段可以使用的函数:getDefaultProps:只调用一次,实例之间共享引用.只有在组件的第一个实例被初始化的时候,才会调用他,然后react会把这个函数的返回结果保存起来,从第二个实例开始 ...
- 【译】x86程序员手册40-10.5初始化的例子
10.5 Initialization Example初始化的例子 译注:本来想把这个例子全部注释完,但由于对intel汇编实不熟悉,有太多的伪指令,本人也是免强看懂,所以就不再做翻译了. $TITL ...
- openresty开发系列32--openresty执行流程之1初始化阶段
openresty开发系列32--openresty执行流程之初始化阶段 一)初始化阶段 1)init_by_lua init_by_lua_block init_by_lua_file语 ...
- 一起学习vue源码 - Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
随机推荐
- 阿里云服务器远程连接错误:由于一个协议错误(代码:0x112f),远程会话将被中断。
2019年10月,阿里云服务器远程连接忽然无法登录.当时正在清理c盘空间,C盘只剩下30+M,忽然远程桌面掉线,以为断网了,再次远程桌面连接时,就出现一下错误. 解决方案:万能的重启!!!具体错误原因 ...
- Linux kernel启动选项(参数)
在Linux中,给kernel传递参数以控制其行为总共有三种方法: 1.build kernel之时的各个configuration选项. 2.当kernel启动之时,可以参数在kernel被GRUB ...
- CentOS7安装与优化
原文地址:https://www.cnblogs.com/blsnt/p/9556946.html
- (Linux基础学习)第六章:查询与修改系统的本地化(locale)与键盘布局的设置(locelectl)
第1节:可查询与修改系统的本地化(locale)与键盘布局的设置[root@centos7 ~]# localectl System Locale: LANG=en_US.UTF-8 VC Keyma ...
- cesium-print 动态打印插件
Cesium 动态打印插件 cesium-print is a plugin for cesium printing Usage Include it in your code after impor ...
- centos7安装redis 并配置在后台启动
官网 https://redis.io/download 先进入 目录 /usr/local 1 下载文件包 $ wget http://download.redis.io/releases/red ...
- LGOJP2831 愤怒的小鸟
题目链接 题目链接 题解 数据范围显然状压/爆搜. 考虑\(f[S]\)表示二进制下已打了的猪的集合. 可以枚举\(S\)的子集\(S_1\),判定\(S\)中\(S_1\)的补集\(S_2\)是否合 ...
- python中的logging日志模块
日志是程序不可或缺的一部分.它可以记录程序的运行情况,帮助我们更便捷地发现问题,而python中的logging日志模块给我们提供了这个机会. logging给我们提供了五种函数用来输出日志:debu ...
- canvans知识点
1.绘制圆的角度示意图: 2 倒计时中,时钟数字的渲染逻辑: 3 直线边缘样式的设置 context.lineCap = "butt"; context.lineCap = &qu ...
- HDU - 3555 - Bomb(数位DP)
链接: https://vjudge.net/problem/HDU-3555 题意: The counter-terrorists found a time bomb in the dust. Bu ...