Kotlin关键字二——constructor和init
2023-12-13 03:59:46
在关键字一——var和val中最后提到了构造函数,这里就学习下构造函数相关的关键字: constructor和init。
主要构造(primary constructor)
kotlin和java一样,在定义类时就自动生成了无参构造
// 会生成默认的无参构造函数
class Person{
}
与java不同的是,当kotlin的构造函数中必须带参数时,则需要在类名后面直接添加参数:
class Person(var name:String, var age:Int){
}
这种在类名后面添加参数(包含无参)的构造方法就称为主要构造(primary constructor)
次要构造(secondary constructor)
当类包含多个构造函数时,需要通过次要构造实现, 次要构造需要用constructor关键字修饰:
// primary constructor
class Person(var age: Int, var name: String) {
// secondary constructor
constructor(name: String) : this(18, name = name)
}
次要构造使用上需要注意:
- 次要构造需要直接或间接调用主要构造
// primary constructor class Person(var age: Int, var name: String) { // 会提示: Primary constructor call expected constructor(name: String) }
- 次要构造中不能声明类的属性,即不能使用var或val
class Person(var age: Int, var name: String) { constructor(name: String) : this(age = 18, name) // 提示'var' on secondary constructor parameter is not allowed constructor(var address:String, name: String):this(name) }
init
kotlin提供了一个方法init,当有多个构造方法,无论使用哪个构造方法都会调用到init方法:
// 调用 Person("xiao ming")或者 Person(16, "小明")后 都会输出
// I am a person
class Person(var age: Int, var name: String) {
constructor(name: String) : this(age = 18, name)
init {
System.out.println("I am a person")
}
}
可以看下实现原理:
public final class Person {
public Person(int age, @NotNull String name) {
super();
this.age = age;
this.name = name;
// init方法
System.out.println("I am a person");
}
public Person(@NotNull String name) {
this(18, name);
}
}
可以看到kotlin构造的执行顺序是
主构造——>init()——>次要构造
文章来源:https://blog.csdn.net/github_34790294/article/details/134173026
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!