分析: 

说明:

内存中存在栈、堆(放创建好的对象)、方法区(实际也是一种特殊堆)

1、JVM加载Demo01时候,首先在方法区中形成Demo01类对应静态数据(类变量、类方法、代码…),同时在堆里面也会形成java.lang.Class对象(反射对象),代表Demo01类,通过对象可以访问到类二进制结构。然后加载变量A类信息,同时也会在堆里面形成a对象,代表A类。

2、main方法执行时会在栈里面形成main方法栈帧,一个方法对应一个栈帧。如果main方法调用了别的方法,会在栈里面挨个往里压,main方法里面有个局部变量A类型的a,一开始a值为null,通过new调用类A的构造器,栈里面生成A()方法同时堆里面生成A对象,然后把A对象地址付给栈中的a,此时a拥有A对象地址。

3、当调用A.width时,调用方法区数据。

当类被引用的加载,类只会加载一次

类的主动引用(一定会发生类的初始化)

①new一个类的对象
②调用类的静态成员(除了final常量)和静态方法
③使用java.lang.reflect包的方法对类进行反射调用
④当虚拟机启动,java Demo01,则一定会初始化Demo01类,说白了就是先启动main方法所在的类
⑤当初始化一个类,如果其父类没有被初始化,则先初始化它父类

类的被动引用(不会发生类的初始化)

①当访问一个静态域时,只有真正声名这个域的类才会被初始化
②通过子类引用父类的静态变量,不会导致子类初始化
③通过数组定义类的引用,不会触发此类初始化
④引用常量不会触发此类的初始化(常量在编译阶段就存入调用类的常量池中了)

 1 public class Demo01 {
 2     static{
 3         System.out.println("静态初始化demo01");
 4     }
 5
 6     public static void main(String[] args) {
 7         System.out.println("静态初始化demo01.main");
 8         /*String str = "aaa";
 9         int a = 23435;*/
10         //调用A类的方法
11         A a = new A();
12
13         //通过反射调用
14     /*    try {
15             Class.forName("com.zzp.A");
16         } catch (ClassNotFoundException e) {
17             e.printStackTrace();
18         }*/
19
20         //注意打印出来的width的值和程序执行的顺序
21         //主动引用
22     //    System.out.println(a.width);
23
24         //被动引用
25     //    System.out.println(a.b);
26
27         //数组初始化
28         //A[] as = new A[10];
29
30         System.out.println(B.width);
31     }
32 }
33
34 //创建一个B类,继承A
35 class B extends A{
36     static{
37         System.out.println("静态初始化B");
38     }
39 }
40
41
42 class A extends A_Father{
43     public static int width = 100;
44     public static final int  b= 100;
45     static{
46         System.out.println("静态初始化A");
47         width = 300;
48     }
49     public A(){
50         System.out.println("创建A类的对象");
51     }
52 }
53
54 class A_Father{
55     static{
56         System.out.println("静态初始化A_Father");
57     }
58 }

转载于:https://www.cnblogs.com/zhangzhipeng001/p/9135690.html

第七篇 JVM核心机制之JVM运行和类加载全过程(二)相关推荐

  1. 第六篇 JVM核心机制之JVM运行和类加载全过程(一)

    JVM核心之JVM运行和类加载全过程 为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存 ...

  2. 第十篇 JVM核心机制之JVM运行和类加载全过程(五)

    加密.解密操作 加密操作 1 /** 2 * 3 * 加密操作 4 * 5 * @author Zhang XiaoDao 6 * 7 */ 8 public class EncrpUtil { 9 ...

  3. JVM核心——JVM运行和类加载全过程

    1.类加载全过程 (1)类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成JVM可以直接使用的Java类型的过程. 加载 将class文件字节码内容加载到内存中,并 ...

  4. JVM核心之JVM运行和类加载全过程

    为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...

  5. JVM运行和类加载全过程

    一. 为什么研究类加载全过程 有助于了解JVM运行过程 更深入了解java动态性(了解热部署.动态加载)提高程序的灵活性. 二. 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和 ...

  6. JVM核心知识体系(转http://www.cnblogs.com/wxdlut/p/10670871.html)

    1.问题 1.如何理解类文件结构布局? 2.如何应用类加载器的工作原理进行将应用辗转腾挪? 3.热部署与热替换有何区别,如何隔离类冲突? 4.JVM如何管理内存,有何内存淘汰机制? 5.JVM执行引擎 ...

  7. 第七篇:双管齐下,JVM内部优化与JVM性能调优

    文章目录 一.前言 二.编译时优化 2.1 Javac编译器 2.2 Java语法糖 2.2.1 泛型和泛型擦除 2.2.2 自动装箱.自动拆箱.遍历循环 2.2.3 条件编译 三.运行时优化(核心: ...

  8. 满满的一整篇,全是 JVM 核心知识点!

    头图 | CSDN 下载自视觉中国 作者 | sowhat1412  责编 | 张文 来源 | sowhat1412(ID:sowhat9094) 想要提高程序员自身的内功心法无非就是数据结构跟算法 ...

  9. 【随笔】JVM核心:JVM运行和类加载

    前言 本篇博客将写一点关于JVM的东西,涉及JVM运行时数据区.类加载的过程.类加载器.ClassLoader.双亲委派机制.自定义类加载器等,这些都是博主自己的一点理解,如果有误,欢迎大家评论拍砖~ ...

最新文章

  1. uikit框架开发前期配置及定制主题方法。
  2. 关于“心脏出血”漏洞(heartbleed)的理解
  3. 计算机科学最重要的32个算法
  4. 微信系列研究之-----资源文件保护的小把戏
  5. cloud foundry_Cloud Foundry Java客户端–流事件
  6. c++运行不出结果_fastjson 不出网利用总结
  7. HDU 3572 Task Schedule
  8. android float类型保留两位小数_你知道MySQL中Decimal类型和Float Double的区别吗?
  9. PDE9 wave equation: general solution
  10. tamtam-nuget-imageserver
  11. AndroidOpenCV摄像头预览全屏问题
  12. 运筹学教学|十分钟快速掌握割平面法及对偶单纯形法(附Java代码及算例)
  13. 基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-汉字手写轨迹输入
  14. 2019 秋季最新最全面 JAVA 面试题 附答案
  15. 想杀死某个端口进程,但在服务列表中却找不到,可以之间通过命令行找到这个进程并杀死该进程,减少重启电脑和找到问题根源。
  16. Linux系统Centos7的虚拟机安装
  17. input触发的事件触发流程
  18. ARGB1555内部存储空间的大小与ARGB转换方式
  19. fiddler抓包 破解微信投票
  20. ddos攻击是利用什么进行攻击

热门文章

  1. 使用JS/Jquery获得父窗口的几个方法(笔记)
  2. 2022-2028年中国再生金属行业投资分析及前景预测报告
  3. xgboost lightgbm catboost 多分类 多标签
  4. python编程问题--第二次
  5. TVM交叉编译和远程RPC
  6. C++ OP相关注意事项
  7. CodeGen字段循环Field Loop
  8. 客快物流大数据项目(八):Docker的安装和启动
  9. 2021年大数据HBase(十六):HBase的协处理器(Coprocessor)
  10. 2021年大数据常用语言Scala(三十七):scala高级用法 高阶函数用法