1. 初始化分为类的初始化和实例的初始化
2. 每个类在 JVM 中都对应一个 Class 实例
3. 父类实例是作为子例的部分存在的 (Class 实例之间也存在父子关系)
4. 初始化实例之前要初始化类
基于以上几点就可以理解以下初始化顺序
1. 父类静态属性、静态类 (父类的初始化,对应 JVM 方法 cinit())
2. 子类的静态属性、静态类 (子类的初始化,对应 JVM 方法 cinit())
3. 父类的实例构造,实例变量初始化 (实例变量初始实际会放到 JVM 的 init() 中)
4. 子类的实例构造,实例变量初始化 (也是对应的 init() 方法)
关于类的 Class 实例,可以回想 Log 的声明 Log log = LogFactory.getLog(TestClass.class); 也就是无论你,new 多少个 TestClass 实例,它们对应着同一个 TestClass 的 Class 实例,也就是为什么很多地方把静态方法、静态属性说成是类的方法、类的属性,其实质就是在 JVM 中存在同一个 Class 实例的方法、属性,也就能保持一致性。 关于父类实例是作为子类的一部分存在,可借鉴 C++ 或是有面向对象特性的 C 函数库(如 gtk),来理解,父类实例会居于子类实例的首地址,所以对子类转型成父类实例时,它是安全的,因为首地址一样的,所以从首地址到 size(父类)就是父类实例地址空间,到size(子类)就是子类实例的地址空间
分享到:
相关推荐
delegate 委托 匿名方法 自动属性 集合初始化器 类初始化器 委托方法
03_JavaSE面试题:类初始化和实例初始化等
Kotlin 1.3 案例集锦第五章 登录渐变动画类初始化
类的初始化顺序,适用于任何一种面向对象的语言。真正了解面向对象的程序的流程。配有实例
实例初始化过程:实例初始化就是执行()方法:()方法可能重载有多个,有几个构造器就有几个方法()方法由非静态实例
对java类初始化以及顺序,详解,由于转载仅供大家参考!
类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序
所有构造方法执行顺序如下: 执行父类的构造方法。没有继承默认继承的Object。... // 单独一行的初始化算一个代码块,这个是初始化a的代码块 private String a = "hello"; // 这个只是声明变量,并b不算代码块
Java 的初始化问题和其他高级语言类似。一个明显不一样的地方是体现在它的类加 载过程。传统的编程语言包括C++等,...Sun 公司说类初始化的时机是“initialize on first actice use”, (在首次主动使用时初始 化)。
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 ... static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero init
ButterKnife的demo实现,注解清晰,实现控件初始化,事件注入
C语言的各种初始化(基础类)C语言的各种初始化(基础类)C语言的各种初始化(基础类)C语言的各种初始化(基础类)
主要介绍了Java类初始化和实例化中的2个“雷区”,大家要注意,感兴趣的小伙伴们可以参考一下
当我们一个系统既需要mysql驱动,也需要oracle驱动的时候,在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java.sql.DriverService的逻辑,也是...
java 数组初始化 详解 doc
Revit外部工具无法初始化附加模块的解决方法 大家在安装完Revit或者卸载后重装Revit时是否遇到外部工具无法初始化附加模块的问题,每次打开不停的弹出对话框,烦得要死。 无法初始化附加模块“CollaborateDB”,...
编程思想的第十四章,代码,本人亲测通过后才上传的 这段是介绍编程思想14章构造函数初始化表达式表
摘要视图订阅曹胜欢欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章登录 | 注册学习专区(140)Java程序员从笨鸟到菜
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。