很长时间没看这方面的内容了,写篇文章让自己牢记一下,顺便分享一下。

首先,写代码以便检验结果。
测试代码:

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;
} }

以上代码就可以检验出类加载的顺序了。

运行代码,控制台打印结果如下:

有父类的情况.png

无父类的情况.png

多次调换代码先后顺序,发现 变量和代码块的加载顺序和在代码中的先后顺序有关。

总结一下:
无父类情况下,加载顺序为:
静态成员变量、静态代码块 ---》 成员变量、代码块 ----》 构造方法。

有父类的情况下,加载顺序为:
父类静态成员变量、父类静态代码块 ---》 子类静态成员变量、子类静态代码块 -----》 父类成员变量、父类代码块
----》 父类构造方法 -----》 子类成员变量、子类代码块 ----》 子类构造方法。

Java类加载顺序的更多相关文章

  1. java 类加载顺序

    1.虚拟机在首次加载Java类时,会对静态初始化块.静态成员变量.静态方法进行一次初始化 2.只有在调用new方法时才会创建类的实例 3.类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始 ...

  2. Java类加载顺序练习题

    一.题目 public class Test { public static Test t1 = new Test();// 标记1 // 普通代码块 { System.out.println(&qu ...

  3. Java类加载器加载类顺序

    java ClassLoader的学习 java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class形式,然后由java虚拟机(JVM)解释执 行,.class字节码文 ...

  4. Java 的类加载顺序

    Java 的类加载顺序 一.加载顺序:先父类后子类,先静态后普通 1.父类的静态成员变量初始化 2.父类的静态代码块 3.子类的静态成员变量初始化 4.子类的静态代码块 5.父类的普通成员变量初始化 ...

  5. tomcat6类加载器与类加载顺序

    tomcat6.0.32 com.dyyx.ShareUtils//返回系统当前时间public static String now(); package com.dyyx;import java.t ...

  6. 深入探讨 Java 类加载器

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 类加载器(class loader)是 Java™中的一个很重要的概念.类 ...

  7. Java类加载机制深度分析

    转自:http://my.oschina.net/xianggao/blog/70826 参考:http://www.ibm.com/developerworks/cn/java/j-lo-class ...

  8. Java 类加载与初始化

    Java系列笔记(1) - Java 类加载与初始化 目录 类加载器 动态加载 链接 初始化 示例 类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如何加载的,这对后面理 ...

  9. 【转载】Java系列笔记(1) - Java 类加载与初始化

    Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...

随机推荐

  1. poj 1125 Stockbroker Grapevine(最短路径)

    Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a me ...

  2. MapGIS计算瓦片数据集

    https://www.docin.com/p-2103834433.html

  3. #define 和typedef

    #define PI 3.1415926 #define是将数值进行定义(语法上也可以定义类型但不建议这么做,具体下面问题说) typedef int Data; rypedef是对类型进行定义 注意 ...

  4. python 开发学习

    https://www.cnblogs.com/wj-1314/p/8476197.html

  5. 《mysql必知必会》学习_第五章_20180730_欢

    使用的工具是wamp的Mysql. P29 select prod_name from products;  #在表products中选列prod_name,顺寻不是纯粹的随机,但是没有说明排列顺序, ...

  6. bootstrap1.2

      <html>   <head>   <meta charset="UTF-8">   <title></title> ...

  7. 直接端口打印 支持USB接口的打印机吗?解决办法

    直接端口打印 支持USB接口的打印机吗?解决办法 www.MyException.Cn  网友分享于:2013-09-15  浏览:488次       直接端口打印 支持USB接口的打印机吗?问题如 ...

  8. hdu 1.2.4

    采用异或... #include<stdio.h> int main() { //freopen("input.txt","r",stdin); i ...

  9. 代码面试集锦 2 - Google

    Given the root to a binary tree, implement serialize(root), which serializes the tree into a string, ...

  10. Python进程池举例

    multiprocessing包 from multiprocessing import Pool def a(num): print num if __name__ == "__main_ ...