美文网首页Java
JAVA的类加载顺序

JAVA的类加载顺序

作者: 灰灰H_K | 来源:发表于2019-08-26 11:29 被阅读0次

理解关于java类的加载顺序


首先来捋一捋java类的加载顺序吧

  • 父类静态代码块 》》静态代码初始化,静态属性(带有static),不包括静态方法
  • 子类的静态代码 》》静态代码初始化,静态属性(带有static),不包括静态方法
  • 父类非静态代码块 》非静态代码块,非静态属性(无static)
  • 父类构造函数
  • 子类非静态方法 》非静态代码块,非静态属性(无static)
  • 子类构造函数

上代码



public class test3 {

    private String baseName = "base";

    public test3(){

        System. out. println("执行父类的test3()");

        callName();

    }

    public void callName(){

        System. out. println("执行父类的callName()");

        System. out. println(baseName);

    }

    //内部类继承

    static class Sub extends test3

    {

        private String baseName = "sub";

        @Override

        public void callName(){

            System. out. println("执行子类的callName()");

            System. out. println(baseName);

        }

    }

    public static void main(String[] args)

    {

        test3 b = new Sub();

    }

}

运行结果


image

代码执行流程


1. main方法执行test3 b=new Sub(),会执行父类的构造函数test3();

2. test3()里有方法callName(),会优先到子类里查询又没有这个方法,如果没有则会执行父类的callName()方法。

3. 由于子类有这个方法,所以执行子类的callName()方法,由于当前只执行到父类的构造函数,子类的非静态属性baseName还未加载,所以会返回null;

加一点料


如果再main方法里加个调用方法


public static void main(String[] args)

    {

        test3 b = new Sub();

        b.callName();

    }

结果

blob.jpg

可以看到,此时会输出子类的baseName属性,因为此时子类的非静态属性已经通过调用反法加载了

以上纯属个人理解,如有错误,请大佬指出;

相关文章

  • 安卓面试概要点

    Java基础 访问修饰符 √ 类加载深入理解Java类加载器ClassLoaderJava中类加载的执行顺序 泛型...

  • 类初始化和加载过程

    一、对象的初始化顺序: java类加载器加载类的顺序:http://blog.csdn.net/crazycode...

  • JAVA的类加载顺序

    理解关于java类的加载顺序 首先来捋一捋java类的加载顺序吧 父类静态代码块 》》静态代码初始化,静态属性(带...

  • Java类加载顺序

    先看一段代码: 输出结果为:1:j i=0 n=02:构造块 i=1 n=13:t1 i=...

  • Java类加载顺序

    很长时间没看这方面的内容了,写篇文章让自己牢记一下,顺便分享一下。 首先,写代码以便检验结果。测试代码: 子类代码...

  • java lang包下ClassLoader类

    类的加载顺序 code···package core.java.lang; /** @author DGW @da...

  • 《深度拆解Java虚拟机》之Java虚拟机是如何加载Java类的

    一、JVM的类加载 Java 虚拟机中的类加载,从 class 字节码文件到内存中的类,按先后顺序需要经过加载、链...

  • 类加载机制

    目录 概念 加载过程 初始化时机 类初始化顺序注意点 双亲委派模型 自定义类加载器 类加载 概念 Java虚拟机把...

  • Java类加载与初始化

    今天复习了一下java类加载时的初始化顺序,先记录一下心得,代码后续补上。 类加载时的初始化顺序 1、一般来说,类...

  • JVM内存模型2--类加载与方法区

    参考:Java 类中各成分加载顺序 和 内存中的存放位置 引用: 加载类文件时,除了非静态成员变量(对象的特有属性...

网友评论

    本文标题:JAVA的类加载顺序

    本文链接:https://www.haomeiwen.com/subject/ghdrectx.html