Java和Kotlin类的初始化顺序
Java
Java程序初始化的顺序:父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造器 -> 子类非静态变量 -> 子类非静态代码块 -> 子类构造器。
Java程序初始化一般遵循3个原则:
- 静态对象(变量)先于非静态对象(变量)初始化。其中静态对象(变量)只初始化一次,因为static在jvm中只有一块区域存储,方法区(Method Area),
他之所以被称为静态是因为从程序创建到死亡他的地址值都不会改变,他只在class类对象初次加载时初始化,因此static只需要初始化一次,而非静态对象(变量)可能会初始化很多次。 - 如果类之间存在继承关系,那么父类优先于子类进行初始化。
- 按照成员变量的定义顺序进行初始化。即使变量定义散布于方法之中,他们依然在任何方法(包括构造函数)被调用前先初始化
Kotlin
init
关键字==>java方法块
companion object
伴生对象==>java静态方法,伴生对象中的init
方法==>java静态代码块
internal open class ClassLoaderA {init {print("2")}init {print("3")}constructor() {print("5")}constructor(name: String) : this() {print("6")}constructor(name: String, id: String) {print("7")}open fun print() {print("4")}companion object {init {print("1")}}
}internal class ClassLoaderB : ClassLoaderA("s") {init {print("b")}init {print("c")}override fun print() {print("d")}companion object {init {print("a")}}
}object Hello {@JvmStaticfun main(args: Array<String>) {var classLoaderB: ClassLoaderA = ClassLoaderB()classLoaderB.print()println()classLoaderB = ClassLoaderB()}
//结果输出
1a2356bcd
2356bc
Java和Kotlin类的初始化顺序相关推荐
- Kotlin类成员初始化顺序
Kotlin实例初始化时,构造函数.成员变量.init块等的初始化顺序必须弄清楚,否则容易出bug: Example: open class Parent {private val a = print ...
- java基础之——类的初始化顺序(转载)
原文地址:http://www.cnblogs.com/chrischennx/p/3612295.html 由浅入深,首先,我们来看一下,一个类初始化有关的都有些啥米: 静态成员变量.静态代码块.普 ...
- java类成员初始化_简单了解Java类成员初始化顺序
这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- java类的静态成员初始化_Java类的初始化顺序 (静态变量、静态初始化块、变量、初始......
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- Java 类的初始化顺序
Java 类的初始化顺序 Java中类的初始化顺序是:父类静态代码块-->子类静态代码块-->父类非静态代码块-->父类构造器-->子类非静态代码块-->子类构造器. 测 ...
- java 初始化参数_JAVA类的初始化顺序与initialize参数
JAVA类的初始化顺序依次是:(静态变量.静态初始化块)->(变量.初始化块)->构造函数, 相同级别的以定义顺序为准, 且静态变量和静态初始化块只初始化一次.通过下面的代码来验证. p ...
- Java类的初始化顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器. 初始化顺序图示: 我们也可以通过下面的测试代码来验证这一 ...
- Java的,与类的初始化顺序
转载自 https://blog.csdn.net/sujz12345/article/details/52590095 <init>与<clinit> <init> ...
最新文章
- 关于BCH交易规范排序(CTOR)的优缺
- weblogic介绍
- Monitorix下个版本可能支持postgresql
- linux c pid获取进程名 进程名获取pid
- JavaScript调用ATL COM(二)
- JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目
- java nlpir_4-NLPIR汉语分词系统-JAVA
- linux 字符串截取_linux下可执行文件分析
- np.stack()函数详解 ==>堆叠 【类似于torch.stack()】
- 浪漫的表白 (5 分)
- 如何获取中间层的结果_如何从0开始做大数据治理(上)
- 汇编中的int 10h 与int 19h
- 函数连续,区间连续,一致连续,绝对连续,Lipschitz连续
- java实现浏览器下载excel文件
- HDU4324 - Triangle LOVE 拓补排序
- 手机怎么使用涂鸦?分享几个手机视频怎么添加涂鸦的妙招
- 【免费赠送源码】Springboot篮球网站19133计算机毕业设计-课程设计-期末作业-毕设程序代做
- 星巴克公司员工股权激励机制
- Loading mirror speeds from cached hostfile
- 表单和servlet在idea中实现文件的上传
热门文章
- 如何组建局域网,用组和域管理分别是怎样设置的?
- 宝塔面板windows建站教程_WindowsVPS-服务器安装宝塔面板建站教程宝塔面板,
- 安装php cms 系统教程,phpcms怎么本地安装_CMS系统建站教程
- HBase分布式存储系统学习
- ubuntu 如何分屏(双屏显示)
- 【深度学习经典网络架构—8】:注意力机制之SE_Block
- 做哪些生意可以年入百万,年入百万的职业有哪些?
- 【阴沟翻船】AVPlayer设置完毕马上调用play方法会导致播放没声音
- 开发Android app需要掌握的技术
- 第一单元:连续时间信号与离散时间信号