美文网首页kotlin
Kotlin-构造函数(2)- 构造函数以及init执行顺序

Kotlin-构造函数(2)- 构造函数以及init执行顺序

作者: 杨0612 | 来源:发表于2021-03-06 15:29 被阅读0次
例子
class Test(val name: String) {//1 类名后面定义的主构造函数,数量<=1

    init {//2 init代码块
        println("init")
    }

    private var age: Int? = null

    constructor(name: String, age: Int) : this(name) {//3 次构造函数,数量>=0
        println("second constructor")
        this.age = age
    }
}
  • 注释1:主构造函数,数量<=1,如果都没有定义主、次构造函数,那么就会有一个默认无参的构造函数可以调用;
  • 注释2:初始化代码块,一般用来做初始化工作;
  • 注释3:次构造函数,数量>=0;
反编译看下

因为Kotlin有很多语法糖,在无法直接点击看源码的情况下,可以通过反编译的方式来窥探原理;

public final class Test {
   private Integer age;
   @NotNull
   private final String name;

   @NotNull
   public final String getName() {
      return this.name;
   }

   public Test(@NotNull String name) {//1
      Intrinsics.checkNotNullParameter(name, "name");
      super();
      this.name = name;
      String var2 = "init";
      boolean var3 = false;
      System.out.println(var2);//2
   }

   public Test(@NotNull String name, int age) {//3
      Intrinsics.checkNotNullParameter(name, "name");
      this(name);
      String var3 = "second constructor";
      boolean var4 = false;
      System.out.println(var3);
      this.age = age;
   }
}
  • 注释1:对应主构造函数;
  • 注释2:对应init代码块;
  • 注释3:对应次构造函数;
到这里,其实大概就能知道执行顺序了
  • 通过主构造函数Test("yang")构建对象,会先执行属性赋值操作"this.name = name",再执行init代码块逻辑;
  • 通过次构造函数Test("yang",30)构建对象,会先执行属性赋值操作"this.name = name",再执行init代码块逻辑,在执行属性赋值操作"this.age = age";
问题来了

通过次构造函数Test("yang",30)构建对象,age这个属性有值吗?

答案:是没有的,因为age赋值是在init之后。

总结

执行顺序:主构造函数-init代码块-次构造函数。

以上分析有不对的地方,请指出,互相学习,谢谢哦!

相关文章

  • Kotlin-构造函数(2)- 构造函数以及init执行顺序

    例子 注释1:主构造函数,数量<=1,如果都没有定义主、次构造函数,那么就会有一个默认无参的构造函数可以调用; 注...

  • 30.init和次构造函数的执行顺序

    输出结果如下:image.png 无论调用主构造函数和次构造函数都会执行init 调用次构造函数先执行init再执...

  • 2019-02-23

    Kotlin 中构造顺序 结果Chen1Chen12 构造函数的执行顺序①先执行值域的直接初始化②然后执行init...

  • C#继承与构造函数的调用

    1、实例化父类时,可以使用new子类,执行构造函数顺序为:先执行父类构造函数,再执行子类构造函数。 2、实例化子类...

  • C++构造和析构调用顺序

    构造函数执行顺序 1.基类构造函数(如有多个则按基类声明顺序从左到右) 2.成员变量构造函数(如果有多个按成员变量...

  • Kotlin-构造函数以及init调用顺序

    1、先说结论: 主构造函数-->init代码块-->次构造函数 2、主构造函数和次构造函数 以下代码,通过调用次构...

  • python 构造对象过程

    __new__ __init__ 这些都是内部构造函数的方法 带有__和__的信息 创建类的过程以及执行顺序,先执...

  • C++构造函数、析构函数执行顺序详解

    构造函数执行顺序 调用虚基类构造函数(如有多个则按虚基类声明顺序从左到右) 调用基类构造函数(如有多个则按基类声明...

  • 28. 构造函数以及构造函数var和val的使用

    1.构造函数 2.构造函数参数的使用 定义变量,然后放入init函数中即可 3.构造函数简化 主构造函数参数没有v...

  • C++ 构造和析构

    构造顺序 C++构造函数按下列顺序被调用:(1)任何虚拟基类的构造函数按照它们被继承的顺序构造;(2)任何非虚拟基...

网友评论

    本文标题:Kotlin-构造函数(2)- 构造函数以及init执行顺序

    本文链接:https://www.haomeiwen.com/subject/vhnjqltx.html