Java类加载顺序
很长时间没看这方面的内容了,写篇文章让自己牢记一下,顺便分享一下。
首先,写代码以便检验结果。
测试代码:
public class Test {
public static void main(String[] args) {
new Test2();
}
}
子类代码:
public class Test2 extends Test3{
{
System.out.println("子类代码块");
}
private String address = getAddress();
static{
System.out.println("子类静态代码块");
}
private static String name = get1Name();
public Test2() {
System.out.println("子类构造方法");
}
private String getAddress() {
System.out.println("子类成员变量");
return null;
}
private static String get1Name() {
System.out.println("子类静态变量");
return null;
}
}
父类代码:
public class Test3 {
private static String name = getName();
private String address = getAddress();
static{
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public Test3() {
System.out.println("父类构造函数");
}
private String getAddress() {
System.out.println("父类成员变量");
return null;
}
private static String getName() {
System.out.println("父类静态变量");
return null;
}
}
以上代码就可以检验出类加载的顺序了。
运行代码,控制台打印结果如下:
多次调换代码先后顺序,发现 变量和代码块的加载顺序和在代码中的先后顺序有关。
总结一下:
无父类情况下,加载顺序为:
静态成员变量、静态代码块 ---》 成员变量、代码块 ----》 构造方法。
有父类的情况下,加载顺序为:
父类静态成员变量、父类静态代码块 ---》 子类静态成员变量、子类静态代码块 -----》 父类成员变量、父类代码块
----》 父类构造方法 -----》 子类成员变量、子类代码块 ----》 子类构造方法。
Java类加载顺序的更多相关文章
- java 类加载顺序
1.虚拟机在首次加载Java类时,会对静态初始化块.静态成员变量.静态方法进行一次初始化 2.只有在调用new方法时才会创建类的实例 3.类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始 ...
- Java类加载顺序练习题
一.题目 public class Test { public static Test t1 = new Test();// 标记1 // 普通代码块 { System.out.println(&qu ...
- Java类加载器加载类顺序
java ClassLoader的学习 java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class形式,然后由java虚拟机(JVM)解释执 行,.class字节码文 ...
- Java 的类加载顺序
Java 的类加载顺序 一.加载顺序:先父类后子类,先静态后普通 1.父类的静态成员变量初始化 2.父类的静态代码块 3.子类的静态成员变量初始化 4.子类的静态代码块 5.父类的普通成员变量初始化 ...
- tomcat6类加载器与类加载顺序
tomcat6.0.32 com.dyyx.ShareUtils//返回系统当前时间public static String now(); package com.dyyx;import java.t ...
- 深入探讨 Java 类加载器
转自:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 类加载器(class loader)是 Java™中的一个很重要的概念.类 ...
- Java类加载机制深度分析
转自:http://my.oschina.net/xianggao/blog/70826 参考:http://www.ibm.com/developerworks/cn/java/j-lo-class ...
- Java 类加载与初始化
Java系列笔记(1) - Java 类加载与初始化 目录 类加载器 动态加载 链接 初始化 示例 类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如何加载的,这对后面理 ...
- 【转载】Java系列笔记(1) - Java 类加载与初始化
Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...
随机推荐
- weblogic配置集群(二)
接到上一篇博文来 weblogic配置集群(一) 三.启动管理server 按照上面的方式创建好域后,在D:\Oracle\Middleware\user_projects\domains\gszhD ...
- (转)FIKKER和Nginx的反向代理服务功能对比评测报告
转自:http://tieba.baidu.com/p/1268737304 针对高并发反向代理服务器 NGINX和FIKKER评测报告 测试硬件环境:服务端:CPU:E5200硬盘:SATA 133 ...
- 敏捷项目管理工具-Trello(电子看板)
Trello简介(https://www.trello.com) A Trello board is a list of lists, filled with cards, used by you a ...
- 20169207《Linux内核原理与分析》第七周作业
这周作业基本分为两个方面,第一方面,阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第9,10章.第二方面.学习MOOC「Linux内核分析」第五讲 ...
- js中对String去空格
str为要去除空格的字符串: 去除所有空格: str = str.replace(/\s+/g,""); 去除两头空格: str = str.replace(/^\s+|\s+$/ ...
- Codeforces Round #536 (Div. 2) B. Lunar New Year and Food Ordering
#include <bits/stdc++.h> #define N 300010 #define PII pair<int, int> using namespace std ...
- jenkins+maven+svn构建项目,及远程部署war包到tomcat上
要使用jenkins构建项目,当然要使用jenkins了,我使用的war版本的jenkins jenkins的官网 http://jenkins-ci.org/ 点击latest下载,但是可能因为天朝 ...
- browsersync
以后不需要F5了 之前实现自动刷新,是通过livereload,它需要插件比较麻烦:现在改为browsersync. BrowserSync,迅捷从免F5开始 完整选项 不止是自动刷新:默认就有 UI ...
- 2.select查询用法
1.定义查询接口 UserMapper.java package tk.mybatis.simple.mapper; import tk.mybatis.simple.model.SysRole; i ...
- [转载]DevOps建立全生命周期管理
全生命周期管理(ALM)领域作为企业DevOps实践的总体支撑,应该说是DevOps领域中最为重要的实践领域,也是所有其他实践的基础设施.现在很多企业都非常重视CI/CD自动化工具的引入和推广,但是对 ...