JVM类的加载顺序
前阵子看到阿里巴巴的一提面试题是关于java类的加载顺序
package com.mikey.demo.Test;
class FatherVariable{
static {
System.out.println("FatherVariable Static Constructor Code");
}
{
System.out.println("FatherVariable Constructor Code");
}
public FatherVariable() {
System.out.println("FatherVariable Constructor Method");
}
}
class ChildVariable{
static {
System.out.println("ChildVariable Static Constructor Code");
}
{
System.out.println("ChildVariable Constructor Code");
}
public ChildVariable() {
System.out.println("ChildVariable Constructor Method");
}
}
class Father{
static FatherVariable fatherVariable = new FatherVariable();
static {
System.out.println("Father Static Constructor Code");
}
{
System.out.println("Father Constructor Code");
}
public Father() {
System.out.println("Father Constructor Method");
}
}
class Child extends Father {
static ChildVariable childVariable = new ChildVariable();
static {
System.out.println("Child Static Constructor Code");
}
{
System.out.println("Child Constructor Code");
}
public Child() {
System.out.println("Child Constructor Method");
}
}
public class Clazz {
public static void main(String[] args) {
new Child();
//父类静态变量
//FatherVariable Static Constructor Code
//FatherVariable Constructor Code
//FatherVariable Constructor Method
//父类静态代码块
//Father Static Constructor Code
//子类静态变量
//ChildVariable Static Constructor Code
//ChildVariable Constructor Code
//ChildVariable Constructor Method
//子类静态代码块
//Child Static Constructor Code
//父类构造代码块
//Father Constructor Code
//父类构造方法
//Father Constructor Method
//子类构造代码块
//Child Constructor Code
//子类构造方法
//Child Constructor Method
}
}
图解分析

实例化顺序
父类静态变量
↓
父类静态代码块
↓
子类静态变量
↓
子类静态代码块
↓
父类构造代码块
↓
父类构造方法
↓
子类构造代码块
↓
子类构造方法
//父类静态变量
//FatherVariable Static Constructor Code
//FatherVariable Constructor Code
//FatherVariable Constructor Method
//父类静态代码块
//Father Static Constructor Code
//子类静态变量
//ChildVariable Static Constructor Code
//ChildVariable Constructor Code
//ChildVariable Constructor Method
//子类静态代码块
//Child Static Constructor Code
//父类构造代码块
//Father Constructor Code
//父类构造方法
//Father Constructor Method
//子类构造代码块
//Child Constructor Code
//子类构造方法
//Child Constructor Method
结论:
1.带继承的类:
先按照声明顺序初始化基类静态变量和静态代码块,接着按照声明顺序初始化子类静态变量和静态代码块,
而后按照声明顺序初始化基类普通变量和普通代码块,然后执行基类构造函数,接着按照声明顺序初始化子类普通变量和普通代码块
最后执行子类构造函数。
JVM类的加载顺序的更多相关文章
- java中带继承类的加载顺序详解及实战
一.背景: 在面试中,在java基础方面,类的加载顺序经常被问及,很多时候我们是搞不清楚到底类的加载顺序是怎么样的,那么今天我们就来看看带有继承的类的加载顺序到底是怎么一回事?在此记下也方便以后复习巩 ...
- java类的加载顺序
related URL: http://www.cnblogs.com/guoyuqiangf8/archive/2012/10/31/2748909.html Parent Class: packa ...
- (六)《Java编程思想》——初始化及类的加载顺序
package chapter7; /** * 初始化及类的加载顺序:顺序如下 * 1.基类的static变量 * 2.导出类的static变量 * 3.基类的变量 * 4.基类的构造函数 * 5.导 ...
- Java学习笔记之——this关键字、非静态成员属性和静态成员属性的区别、类的加载顺序
一.this关键字 1.代表当前类的对象 2.通过” . ”调用成员属性和成员方法 3.通过this可以区分成员属性和参数 参数名和属性名相同的情况,默认是参数名 二.非静态成员属性和静态成员属性的区 ...
- JVM——类的加载过程
附一张图方便理解,一个类的执行过程 类的加载过程,简明的来说 类装饰器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件.在Java中,类装载器把一个类装入JVM中,要经过以下步骤: 装载:查 ...
- java架构之路-(JVM优化与原理)JVM类的加载机制
话不多说,先上图. ***.class文件执行大概就是这样来走的.我们都知道我们的java文件经过编译以后会生成对应的class文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
- Jvm类的加载机制
1.概述 虚拟机加载Class文件(二进制字节流)到内存,并对数据进行校验.转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这一系列过程就是类的加载机制. 2.类的加载时机 类从被虚拟机加 ...
- JVM 类的加载机制
在对类的实例化之前.JVM 一般会先进行初始化 主要经过如下几个阶段: 1.加载 类加载的第一阶段,类加载时机有两个: 1.预加载:当虚拟机启动时,会预加载 ...
- java类的加载顺序和实例化顺序(Demo程序)
一.main函数中实例化对象 父类 package com.learn; public class Father { //静态变量 public static int num_1 = 1; //静态代 ...
随机推荐
- selenium通过cookies直接免密登录
前提知识: 1.webdriver中提供了操作cookie的相关方法: get_cookies() 获得cookie信息 add_cookie(cookie_di ...
- 转载:WAV header
转自:http://www.cnblogs.com/CoderTian/p/6657844.html WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource I ...
- Yii2 的 updateAll 方法参数详解
Yii2 中的 updateAll() 可以接受三个参数,$attributes, $condition, $params = null 第一个参数是要更新的值,第二个是条件,如果第二个条件中用了占位 ...
- Java内存模型(JMM)那些事
本文是库存文章,去年年底学习了慕课网的并发编程课程,今年年初看完了<深入理解Java虚拟机>这本书,但是很多内容忘得差不多了,打算写写博客回忆一下那些忘在脑后的知识点. 温故而知新 更多J ...
- 爬虫 - Scrapy中间件
前提:看Scrapy架构图 不管什么Middlewares,都写在middlewares.py里面. 然后在settings.py里的DOWNLOADER_MIDDLEWARES或者SPIDER_MI ...
- Web.config和App.config配置连接字符串
读取配置文件,获取连接字符串 <!-- 第一种 --> <connectionStrings> <add name="connString" conn ...
- 种树-洛谷P1250(差分约束)
传送门 令前缀和为s[i],则⼀一个要求等价于 s[r] - s[l - 1] >= x. 题中还有别的要求,包括 s[i] - s[i - 1] <= 1 和 s[i] - s[i- 1 ...
- Jmeter变量嵌套的方法
jmeter中变量的嵌套一般有两种方式 1,调用__V函数 { "phone": "${phone}", "xxId": "${_ ...
- 吴裕雄 PYTHON 神经网络——TENSORFLOW 单隐藏层自编码器设计处理MNIST手写数字数据集并使用TensorBord描绘神经网络数据
import os import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from tensorflow ...
- IIS-代理
http://192.168.11.3:8083/java 访问 http://192.168.11.3:8089 http://192.168.11.3:8083/?id=1 访问http:/ ...