原理分析

代码演示

1. 案例

SuperA代码如下:

package com.junna.clazz;public class SuperA {static InnerB b = new InnerB();static {System.out.println("SuperA");}static class InnerB{static {System.out.println("InnerBInnerBInnerB");}public InnerB() {System.out.println("InnerB is init");}}
}

A代码

package com.junna.clazz;public class A extends SuperA{static B b = new B();static {System.out.println("AAAAAAAAAA");}static class B{static {System.out.println("BBBBBBBBBBBBBBBBBB");}public B() {System.out.println("B is init");}}public static void main(String[] args) {System.out.println(A.class);}
}

输出结果:

InnerBInnerBInnerB
InnerB is init
SuperA
BBBBBBBBBBBBBBBBBB
B is init
AAAAAAAAAA
class com.junna.clazz.A

2. 案例

SuperA代码如下:

package com.junna.clazz;public class SuperA {    static class InnerB{static {System.out.println("InnerBInnerBInnerB");}public InnerB() {System.out.println("InnerB is init");}}static {System.out.println("SuperA");}public SuperA() {System.out.println("SuperA init");}InnerB dB = new InnerB();{System.out.println("SuperA obj block!");}static InnerB b = new InnerB();
}

A代码

package com.junna.clazz;public class A extends SuperA{static B b = new B();static {System.out.println("AAAAAAAAAA");}static class B{static {System.out.println("BBBBBBBBBBBBBBBBBB");}public B() {System.out.println("B is init");}}{System.out.println("A obj block!");}B dB = new B();public A() {System.out.println("A init");}public static void main(String[] args) {SuperA superA = new A();A a = (A) superA;System.out.println(superA.b.getClass());System.out.println(a.b.getClass());}
}

输出结果:

SuperA
InnerBInnerBInnerB
InnerB is init
BBBBBBBBBBBBBBBBBB
B is init
AAAAAAAAAA
InnerB is init
SuperA obj block!
SuperA init
A obj block!
B is init
A init
class com.junna.clazz.SuperA$InnerB
class com.junna.clazz.A$B

加载顺序结论

类加载顺序

  1. 按代码先后顺序加载父类静态成员、代码块
  2. 按代码先后顺序加载子类静态成员、代码块
  3. 按代码先后顺序加载父类实例成员、代码块
  4. 加载父类构造函数
  5. 按代码先后顺序加载子类实例成员、代码块
  6. 加载子类构造函数

多态属性

  1. 父类引用指向子类对象,访问成员变量只能访问父类的
  2. 父类引用指向子类对象,访问方法时,是访问子类的方法区
  3. 子类引用指向自身对象,访问成员变量只能访问自身的变量
  4. 子类引用指向自身对象,访问方法时,只能访问自身的方法区

JVM了解——类加载器相关推荐

  1. 【JVM】类加载器:双亲委派机制、沙箱安全机制

    · 双亲委派机制.沙箱安全机制是JVM中类加载器系统的相关术语 · 在这之前,应该先了解JVM类加载器系统的相关概念 一.类加载器基础知识 见下图1,java文件首先会被编译成class文件,clas ...

  2. JVM之类加载器ClassLoader

    JVM之类加载器ClassLoader 本文目录 JVM简介 类加载器解析 1. JVM简介 ①. JVM是运行在操作系统之上的,它与硬件没有直接的交互 ②. JVM体系结构概览 注: 2. 类装载器 ...

  3. jdk包含java语言核心的类_1.1 jvm核心类加载器--jdk源码剖析

    目录 前提: 运行环境 1. 类加载的过程 1.1 类加载器初始化的过程 1.2 类加载的过程 1.3 类的懒加载 2. jvm核心类加载器 3. 双亲委派机制 4. 自定义类加载器 5. tomca ...

  4. JVM——自定义类加载器

    0. 为什么需要自定义类加载器   网上的大部分自定义类加载器文章,几乎都是贴一段实现代码,然后分析一两句自定义ClassLoader的原理.但是我觉得首先得把为什么需要自定义加载器这个问题搞清楚,因 ...

  5. jvm十三:类加载器命名空间

    package com.atChina.jvm;import java.io.*;public class Test16 extends ClassLoader{private String clas ...

  6. jvm十一:类加载器双亲委托机制

    在双亲委托机制中,各个加载器按照父子关系形成了树形结构,除了根类加载器之外,其余的类加载器都且只有一个父加载器. package com.atChina.jvm;import sun.awt.Symb ...

  7. 深入理解JVM(6)——类加载器

    虚拟机设计团队把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流(即字节码)"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现 ...

  8. jvm类加载机制和类加载器_在JVM之下–类加载器

    jvm类加载机制和类加载器 在许多开发人员中,类加载器是Java语言的底层,并且经常被忽略. 在ZeroTurnaround上 ,我们的开发人员必须生活,呼吸,饮食,喝酒,并且几乎与类加载器保持亲密关 ...

  9. 在JVM之下–类加载器

    在许多开发人员中,类加载器是Java语言的底层,并且经常被忽略. 在ZeroTurnaround上 ,我们的开发人员必须生活,呼吸,饮食,喝酒,并且几乎与类加载器保持亲密关系,才能生产JRebel技术 ...

  10. 什么是JVM?JVM概述——初识JVM(类加载器,垃圾回收器,执行引擎)

    此篇文章属于作者初识之后的概述总结,谈论的层面很浅,大佬勿喷. 目录 类加载器 内存管理器(垃圾回收器) 执行引擎 JVM全称是Java Virtual Machine,意为java虚拟机,所以要了解 ...

最新文章

  1. 用matlab怎么画视电阻率拟断面图,在MATLAB平台上实现可控源音频大地电磁反演数据三维可视化显示...
  2. 狼羊菜过河问题深入学习分析——Java语言描述版
  3. SharedPreference.Editor的 apply 和commit 方法异同
  4. 运维 服务器安装,IT服务器运维安装CentOS后,你要做的10件事
  5. SQL入门经典(第5版)pdf
  6. php用curl调用接口方法,get和post两种方式
  7. 锋利的jQuery-3--用js给多选的checkbox或者select赋值
  8. 智能城市即将爆发,WiFi行业再迎机遇
  9. 开始看看repast建模方面的东西
  10. Rainmeter 雨滴桌面 主题分享
  11. Hybird开发之webview
  12. 在家怎么做冰皮月饼 冰皮月饼的做法
  13. 依托TAPD的敏捷实践
  14. switch-case的使用
  15. 机器学习概述(机器学习实战)
  16. 基于kettle实现数据采集
  17. 小朋友排队(树状数组)
  18. 【模拟赛】2018 蓝桥杯省赛 B 组模拟赛(五)
  19. 基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  20. Qt android 打印调试

热门文章

  1. 爬虫入门实战(标价400的单子-1)
  2. OpenGL学习三十七:Windows 3D字体
  3. 功能安全——安全计划
  4. 解决MySQL登录ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor)问题
  5. Set 接口实现类-LinkedHashSet
  6. Android中方向传感器的用法,制作简易指南针
  7. java阿克斯码,超级碗冠军拥有最强新秀跑卫? 2020赛季新秀跑卫前瞻
  8. 2022-2027年中国空气分离设备行业发展监测及投资战略研究报告
  9. 单点登录--Day10
  10. maven打包时去除不需要的jar包策略