Kotlin 全面学习之路 (四) -- 类与构造器

1、类声明

class People { ... }

类声明由 class 关键字类名类头(指定类型参数、主构造器等)由花括号包围的 类体 构成,其中类头和类体是可选。

class People

2、构造函数

在 Kotlin 中一个类可以有 一个主构造函数多个次构造函数

2.1 主构造函数

主构造器是类头的一部分,在类名与可选参数后:

class People constructor (name: String) { ... }

如果主构造函数 没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字,反之,constructor 关键字不可以被省略。

//constructor 可以被省略
class People (name: String) { ... }

//constructor 不可以被省略
class public @Inject People (name: String) { ... }

2.2 初始化块

由于主构造器不可以含有任何代码,初始化代码可以放在 init 初始化块 中。

class People(var name: String) {
    val name: String
    //初始化语句块用于配合构造方法给属性赋初始值
    init {
        this.name = name
    }
}

如果类体中存在多个 init 代码块,那么其执行顺序和其在类体中的顺序一致。

2.3 次构造函数

类体中可以声明以 constructor 为前缀的次构造函数。

class People{
  constructor{
    ....
  }
}

如果类存在主构造函数,那么每个次构造函数需要直接 委托给主构造函数,或者通过其他次构造函数间接 委托给主构造函数

class People(var name: String){
  init{
    name = "Mike"
  }
  
  constructor(name: String, age: Int):this(name){
	....
  }
}

2.4主构造函数、初始化块、次构造函数的执行顺序

代码示例:

class People(var name: String) {
    init {
        println(name)
    }

    init {
        name = name.toUpperCase()
        println(name)
    }

    constructor(name: String, age: Int, sex: String) : this(name, age) {
        println("the age of $name is $age is $sex")
    }

    constructor(name: String, age: Int) : this(name) {
        println("the age of $name is $age")
    }

}

Main 中的调用:

val people = People("mike",34,"man")

可以看到我们仅仅是初始化了一个变量 – people, 没有做其他操作。其打印日志如下:

mike
MIKE
the age of mike is 34
the age of mike is 34 is man

从上面的打印日志我们可以发现

  1. 初始化块优先于次构造函数执行
  2. 初始化块间的执行顺序和其在类体中的顺序一致
  3. 次构造函数之间的执行顺序和其依赖关系一致。

其原因如下:

初始化块中的代码实际上会成为主构造函数的一部分,它委托给主构造函数
会作为次构造函数的第一条语句,因此所有初始化块中的代码都会在次构造函数体
之前执行。即使该类没有主构造函数,这种委托仍会隐式发生,并且仍会执行初始
化块。
class People{ init{ .... } }

2.5 默认主构造函数

一个非抽象而且没有声明任何构造函数的类,它会默认生成一个不带参数的主构造函数,其可见性默认为 public 。如果你不希望你的类有一个公有的构造函数,你可以显式的声明该主构造函数为 private

class People private constructor(){
  ....
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值