首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin】类初始化 ③ ( init 初始化 | 初始化顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化代码 -> 次构造函数代码 )

文章目录 一、init 初始化 二、初始化顺序 一、init 初始化 ---- 在 Kotlin , 可以定义 init 初始化 , 在其中可以为 变量赋值 , 执行一些检查相关代码 ,...该 init 初始化在 创建类实例对象 时执行 ; 代码示例 : 在下面的代码 init 初始化 , 对 name 属性进行了修改 , 检查了 age 属性是否合法 ; class Hello...时会执行一系列 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 属性赋值 类属性赋值 init 初始化 代码执行 次构造函数 代码执行 代码示例 : 通过下面的代码分析 Kotlin...初始化开始执行 次构造函数开始执行 Tom , 18 从上述执行结果上看 , 可以知道先执行 init 初始化 , 然后执行 次构造函数 ; 查看 Kotlin 字节码 , 并将其反编译回 Java...主构造函数 临时变量 ; 最后 , 为 gender 赋值 , 这是在 init 初始化 中进行赋值 ; 然后分析 次构造函数 , 在 如下 次构造函数代码 , 先执行了 主构造函数 ,

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

【错误记录】Kotlin 代码运行时报错 ( 在 init 初始化调用还未初始化成员属性 )

文章目录 一、报错信息 二、问题分析 三、解决方案 该问题本质就是 , 成员属性 在 init 初始化代码中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常...code 1 上述代码在编译时 , 没有报错 ; 二、问题分析 ---- 从 初始化 角度分析 上述代码执行顺序 , Kotlin 类 对象在实例化 时会执行一系列 初始化操作 , 这些操作按照如下顺序执行...: 主构造函数 属性赋值 类属性赋值 init 初始化 代码执行 次构造函数 代码执行 首先 , 上述代码没有主构造 函数 , 因此该项忽略 ; 然后 , 执行属性赋值 , 代码定义了...) name = "Tom" } 该问题本质就是 , 成员属性 在 init 初始化代码中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常...; 三、解决方案 ---- 调换 初始化代码 代码顺序 , 先给 name 成员赋值 , 然后再执行 调用 name 成员方法 ; class Hello{ var name: String

1.7K10

Java初始化过程:(静态成员变量,静态代码,普通成员变量,代码初始化顺序

初始化过程是这样: 1.首先,初始化父类静态成员变量和静态代码,按照在程序中出现顺序初始化; 2.然后,初始化子类静态成员变量和静态代码,按照在程序中出现顺序初始化; 3.其次,...初始化父类普通成员变量和代码,在执行父类构造方法; 4.最后,初始化子类普通成员变量和代码,在执行子类构造方法; 类加载顺序: 父类静态成员变量、静态>子类静态成员变量、 静态>...父类普通成员变量、非静态>父类构造函数>子类 普通成员变量、非静态>子类构造函数 静态代码:随着类加载而执行,而且只执行一次 非静态代码:每创建一个对象,就执行一次非静态代码 关于各个成员简介

29030

构造方法、类初始化以及类字段初始化顺序

: 如果类提供了一个自定义构造方法,将导致系统不再提供默认构造方法。...多构造函数 类初始化 ​ 如果一个类既有初始化,又有构造方法,同时还设定了字段初始值,谁说了算?...,在实际开发不要这样写代码,应该尽量保证一个字段只初始化一次! ​...} 规律(类字段初始化顺序) 执行类成员定义时指定默认值或类初始化,到底执行哪一个要看哪一个“排在前面”。 执行类构造函数。...类初始化不接收任何参数,而且只要一创建类对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行代码”。

50920

【java基础☞初始化顺序】java继承初始化顺序

1、初始化顺序:父类静态变量-->父类静态代码-->子类静态变量-->子类静态代码快-->父类非静态变量(父类非静态代码)-->父类构造函数-->子类非静态变量(子类非静态代码...)-->子类构造函数 重点关注:父类非静态变量(父类非静态代码)是同一级,看哪个部分写在类最前面谁就先被执行,子类非静态变量(子类非静态代码)也是一样。...子类静态成员被初始化 子类静态代码被执行 父类非静态成员被初始化 父类非静态代码被执行 父类构造方法被执行 子类非静态成员被初始化 子类非静态代码被执行 子类构造函数被执行...初始化 初始化阶段是类加载过程最后一步,主要是根据程序赋值语句主动为类变量赋值。 当有继承关系时,先初始化父类再初始化子类,所以创建一个子类时其实内存存在两个对象实例。...以上除了搞清楚执行顺序外,还有一个重点->结论2:静态资源在类初始化只会执行一次。不要与第3个步骤混淆。

95830

Java变量初始化顺序

Java变量初始化顺序 在写一个通用报警模块时,遇到一个有意思问题,在调用静态方法时,发现静态方法内部对静态变量引用时,居然抛出了npe,仿佛是因为这个静态变量初始化在静态方法被调用时,还没有触发...初始化顺序初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码,构造方法) 继承关系初始化顺序 父类静态成员,静态代码 -》 子类静态成员,静态代码 -》 父类实例变量(属性,...静态变量初始化顺序初始化时,会优先初始化静态成员,那么一个类中有多个静态成员时,如何处理? 下面是一个使用静态成员,静态代码,静态方法测试类,那么下面的输出应该是怎样呢?...初始化顺序初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码,构造方法) 继承关系初始化顺序 父类静态成员,静态代码 -》 子类静态成员,静态代码 -》 父类实例变量(属性,...实例代码,构造方法)-》子类实例变量(属性,实例代码,构造方法) 相同等级初始化先后顺序,是直接依赖代码初始化先后顺序 2.

1.1K10

【Java】Java初始化顺序(静态方法,静态,非静态,最后有流程图)

实际上要去判断一个类初始化顺序,需要分一下情况,一种是没有继承关系类(不考虑Object类),一种是有继承关系类。 一、无继承关系类初始化 先看下边代码。...在我们类第一次进行初始化时候,我们类静态和静态属性会被优先构建。之后才轮得到非静态和非静态属性。...类一个对象进行初始化,按照代码顺序从上往下先构建静态属性、方法和静态,之后在构建非静态和非静态属性。...(类静态和静态变量只会初始化一次,也就是类第一次被用到时候) 1、静态变量k被初始化 private static int k = 1; 2、静态变量t1初始化 private static...如果你可以完整走出以上输出顺序,你就可以把t1和t2对象加上去了,不过不要被输出顺序所迷惑,就比如说,你可能会看到父类静态和属性初始化完成后,初始化不是子类静态和静态属性,而是父类非静态和非静态属性

13510

Javatry-finally执行顺序

本文主要介绍关于异常处理时候try-catch-finally执行顺序,一般情况下,finally是会执行,在Java,try-finally执行顺序通常遵循以下规则: try代码首先被执行...如果try代码执行完毕,控制流将转到finally。无论try代码是否抛出异常,finally代码都将被执行。...finally代码执行完毕后,整个try-finally结束,控制流将继续到下一个语句或代码。...finally,tryreturn结果会放在类似一个队列,之后如果finally中有return语句,则会把finallyreturn语句中结果放入队列,最终是队列第一个数据,即finally...如果finally没有return语句,不管怎么改变变量,返回结果还是try改变值。

22550

AS3.0初始化顺序

我做了一个比较,java中有静态初始化概念(as3是没有的),格式如下: static { //TODO…. } 关于java初始化顺序,我想只要随便搜索一下,将有超过十万结果出来 这里侧重点在...(); } } } 这里有个问题就是,在调用类构造函数时,类变量才被初始化 运行结果显示如下: 父类--静态变量 子类--静态变量 父类--变量 父类--构造器...as3初始化顺序与java基本上是相同(除了as3没有静态概念外): (1)当类被加载时,该类静态属性和方法会被初始化 (2)初始化成员变量 (3)调用构造器 而java: ?...运行结果: 父类--静态变量 父类--静态初始化 子类--静态变量 子类--静态初始化 父类--变量 父类--初始化 父类--构造器 子类--变量 子类--初始化 子类--构造器...如果去除”静态初始化” 那么java与as3类加载顺序表现上是一致

65140

Java初始化

三种初始化数据域方法:在构造器设置值在声明赋值初始化(initialization block)初始化在一个类声明,可以包含多个代码。只要构造类对象,这些就会被执行。...首先运行初始化,然后才运行构造器主体部分。初始化这种机制不是必需,也不常见。通常会直接将初始化代码放在构造器。---由于初始化数据域有多种途径,所以列出构造过程所有路径可能相当混乱。...,或者使用一个静态初始化来对静态域进行初始化。...将代码放在一个,并标记关键字 static。下面是一个示例。其功能是将雇员 ID 起始值赋予一个小于 10000 随机整数。...与实例域一样,除非将它们显式地设置成其他值,否则默认初始值是 0、false 或 null。所有的静态初始化语句以及静态初始化都将依照类定义顺序执行。

16720

KotlinKotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

初始化代码 ---- 1 . init 代码引入 : 主构造函数没有函数体 , 不能执行任何代码 ; 主构造函数初始化相关操作可以放在 init 初始化代码 ; 2 . init 初始化代码...: 一个类可以定义多个 init 代码 , 其执行顺序是按照代码顺序从上到下执行 ; 3 ....代码执行顺序 : init 初始化代码 , 与类属性定义优先级相同 , 在类对象实例初始化时 , 会按照在类定义顺序 , 依次执行类属性初始化init 初始化代码 ; 4 ....主构造函数参数访问性 : 可以在 类属性字段初始化赋值 和 init 初始化代码 访问主构造函数参数变量值 ; 2 ....构造函数 代码执行顺序 ---- 1 . 代码执行顺序 : 先执行主构造函数 , 此时会初始化成员属性 与 执行 init 初始化代码 , 然后执行次构造函数内容 ; 2 .

3K10

SpringBoot系列教程之Bean之指定初始化顺序若干姿势

在所有其他 Bean 初始化之前执行) 循环依赖问题,如过上面的 CDemo2 构造方法有一个 CDemo1 参数,那么循环依赖产生,应用无法启动 另外一个需要注意点是,在构造方法,不应有复杂耗时逻辑...在使用这个注解时候,有一点需要特别注意,它能控制 bean 实例化顺序,但是 bean 初始化操作(如构造 bean 实例之后,调用@PostConstruct注解初始化方法)顺序则不能保证,比如我们下面的一个实例...; 然后从初始化方法输出可以知道,在上面这个场景,虽然 RightDemo2 这个 bean 创建了,但是它初始化代码在后面执行 题外话: 有兴趣同学可以试一下把上面测试代码@Autowired...小结 在小结之前,先指出一下,一个完整 bean 创建,在本文中区分了两顺序 实例化 (调用构造方法) 初始化 (注入依赖属性,调用@PostConstruct方法) 本文主要介绍了三种方式来控制...bean 初始化方法调用顺序无法保证 BeanPostProcessor 方式,来手动控制 bean 加载顺序 II.

1.4K30

一文整懂 Java 静态代码 初始 构造方法执行顺序

一文整懂 Java 静态代码 / 初始 / 构造方法执行顺序 “ 相信,刷过面试题应该都碰到过很多题,关于类继承后 Java 静态代码 / 初始 / 构造方法执行顺序问题,每每记一下又忘了...,那么,今天来用不多时间复习一下” 01.静态代码 / 初始 / 构造方法执行顺序 package erdan.demo; public class Demo { static {...wx_fmt=png] 笔记:初始(非静态代码)总是和构造方法是一家子,会一出现 02.测试继承之后执行顺序 package erdan.demo; public class ChildrenDemo...初始 111 ChildrenDemo 初始 222 有参构造方法 ChildrenDemo:1 可以看到下面除了调用有参无参差别外,虚线下比上面少了静态代码 ps: 类比子类先执行 态代码只会输出一次...,初始与构造方法是一家子,输出在一,初始会在构造前初始化 03.总结 父类比子类先行执行 静态代码,在类第一次加载时候,会初始化一次,适合项目中初始化全局参数,常量等 初始与构造方法是一家子

83911

静态代码、构造代码以及构造函数加载顺序

构造代码,和构造函数都存在于一个类,只不过,他们执行先后顺序和执行次数不同。...构造函数:构造函数命名必须和类名完全相同,它没有返回值,也不能用void来修饰。 执行顺序优先级:静态>main()>构造>构造方法。...接着开始在堆内存对实例变量进行默认初始化, 然后执行构造代码,对object进行对应构造代码初始化, 最后进行构造函数初始化,对object进行对应构造函数初始化。...作用分析 静态代码用于给类初始化,类加载时候就会被执行; 构造代码用于给对应对象初始化,只要创建对象就会被执行,而且执行顺序优先于构造函数; 构造函数用于给对应对象初始化,只要创建对象,就会选择相应构造函数进行初始化...顺序为:初始化父类静态代码->初始化子类静态代码->初始化父类构造代码->初始化父类构造方法->初始化子类构造代码->初始化子类构造方法  根据输出结果,"before new Child()

69720
领券