Kotlin类成员初始化顺序
Kotlin实例初始化时,构造函数、成员变量、init块等的初始化顺序必须弄清楚,否则容易出bug:
Example:
open class Parent {private val a = println("Parent.a")constructor(arg: Unit=println("Parent primary constructor default argument")) {println("Parent primary constructor")}init {println("Parent.init")}private val b = println("Parent.b")
}class Child : Parent {val a = println("Child.a")init {println("Child.init 1")}constructor(arg: Unit=println("Child primary constructor default argument")) : super() {println("Child primary constructor")}val b = println("Child.b")constructor(arg: Int, arg2:Unit= println("Child secondary constructor default argument")): this() {println("Child secondary constructor")}init {println("Child.init 2")}
}
Output:
Child primary constructor default argument
Parent primary constructor default argument
Parent.a
Parent.init
Parent.b
Parent primary constructor
Child.a
Child.init 1
Child.b
Child.init 2
Child primary constructor
Conclusion:
- 按照父类->子类的顺序执行初始化(同Java)
- 构造函数在成员变量初始化之后执行(同Java)
- init与成员变量初始化按照代码位置顺序执行 (重点!)
因此,下面的代码会出现NPE
class Foo {init {initList()}val list : MutableList<String> = mutableListOf()fun initList() {list.clear()}}
Kotlin类成员初始化顺序相关推荐
- java类成员初始化_简单了解Java类成员初始化顺序
这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...
- Java和Kotlin类的初始化顺序
Java Java程序初始化的顺序:父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> ...
- 类成员初始化顺序php,PHP-php类成员变量初始化的问题?
PHP类中,若要初始化成员属性,那么成员属性的初始值必须是一个常数,如果不是常数(如变量),则会报错,所以,如果你要初始化就只能是在构造函数里进行初始化,不过你可以写一个方法,这样就可以在构造函数里批 ...
- C#中成员初始化顺序
C#中成员初始化顺序 http://blog.csdn.net/huangcailian/article/details/25958967 一.成员初始化整体顺序 1.成员赋值初始化先于构造函数: 2 ...
- Java类的初始化顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器. 初始化顺序图示: 我们也可以通过下面的测试代码来验证这一 ...
- Java 类的初始化顺序
Java 类的初始化顺序 Java中类的初始化顺序是:父类静态代码块-->子类静态代码块-->父类非静态代码块-->父类构造器-->子类非静态代码块-->子类构造器. 测 ...
- java 初始化参数_JAVA类的初始化顺序与initialize参数
JAVA类的初始化顺序依次是:(静态变量.静态初始化块)->(变量.初始化块)->构造函数, 相同级别的以定义顺序为准, 且静态变量和静态初始化块只初始化一次.通过下面的代码来验证. p ...
- 【转载】c#类的成员初始化顺序
作者:彭白洋 创建于:2009-01-15 出处:http://www.cnblogs.com/siceblue/archive/2009/01/15/1376430.html 收录于:2013-0 ...
- java基础之——类的初始化顺序(转载)
原文地址:http://www.cnblogs.com/chrischennx/p/3612295.html 由浅入深,首先,我们来看一下,一个类初始化有关的都有些啥米: 静态成员变量.静态代码块.普 ...
最新文章
- Tooltip jqueryui
- css表格文字超数量就竖排_求助!!一个非常棘手的问题。就是文字竖排显示的问题...
- 自动化设备的软件框架
- ArcGIS生成根据点图层生成等值面并减小栅格锯齿的操作步骤
- HEVC/H265 HM10.0 分析(二)TComDataCU.cpp
- icinga-report+jasperserver+icinga-web安装步骤
- js数据类型 方法 函数
- 字典:python的基础数据类型
- apache配置Options详解
- ipad协议828版
- Java GC机制
- 小白上路之javascript数组的介绍
- 教你学Java | 带你学习Java多线程(续:创建线程的其他方式与activeCount方法的浅谈)
- python基础一 day56
- Ubuntu/linux c开发(4)线程池
- 赋能数智化· 从数据到价值转变 | GCT冠骋信息高科技电子行业智能制造高端研讨会成功举办
- 肺实质分割python实现
- VIP + Nginx + Keepalived
- html5中创建多个nav,HTML5 对各个标签的定义与规定:nav
- [分享]电脑故障应急处理宝典