开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
在学习了
swift、dart基础语言后,我就屁颠屁颠去学习kotlin语言.在基础语法上.三个语言基本上都差不多.当我看到类的介绍的时候,突然觉得好奇怪的构造函数.下面我们一起来看一下吧.
类的定义
kotiln的类主要由构造函数、函数、属性、对象声明等等组成的.基本上和dart、swift是一样的
-
类也是使用
class关键字声明.后面加上类名.以及{},就组成了kotlin中最基本的类了//这样我们就声明了一个Test类 class Test {} -
空类在这里我们又发现了一个好玩的定义
空类,说是实话在dart和swift中是不支持的.到现在我还是不太清楚空类存在的意义是啥.class Test
具体
类中的属性啦,函数啦,不在本文章分享的内容中,后续我会好好的学习一下.好了,铺垫了这么多,终于要上主菜了.往下看
主构造函数
-
含义
kotlin类中必然有一个主构造函数或者大于或等于1个次的构造函数.
如果一个类不写构造函数,那么就会有一个默认的主构造函数.即类本身. -
组成
[类名]+ [可选的参数] -
关键词
`constructor`: 构造函数
-
默认
构造函数// 这个就是最基本的`主构造函数` class Test constructor(){} // 由于没有参数可以简写成 class Test {}从这里,
类的创建,还是中规中矩的,基本上和dart、swift是一样的. -
带参数
构造函数-
普通参数
// 只有一个参数 class Test constrictor(name:String){} // 多个参数 class Test constrictor(name:String,title:String...){} // 当然如果你的构造参数只是普通类型,并没有注解标记 // 那么constrictor是可以省略的 class Test(name:String){} -
注解标记
class Test @Inject internal constrictor(name:String) {}当然,从上面的事例中,我们发现其实
主构造方法并没有方法体.那么如果需要初始化数据,应该怎么执行呢.这一点其实不用担心,kotiln也是有init方法的.这一点我个人感觉,和swift是一样的.默认都有一个init方法.系统会在初始化的时候,自己调用.到这里我们就发现了不同,一般我们声明类,如果有参数.在
swift是需要重写构造函数,但必须的{}里.而这里直接在{}外,即可定义,确实也是省事了.不错的想法.
-
-
私有
类默认的构造函数都是对外公开的,你可以理解为你声明的
类.在哪里都可以引用.如果你不想被外界使用呢.class Test private constructor () {}
次构造函数
这个次构造函数反而和我们平时使用的构造函数差不多了,但是,必须要加前缀constrictor如下所示
- 无参数
class Test { constrictor() {} } - 有参数
-
主构造没有参数.次构造有参数
class Test { constrictor(name:String){} } -
主构造有参数,次构造也有
如果
主构造函数有参数,那么每个次构造函数都要代理主构造函数.如果是同类中使用this关键词.class Test(name:String){ constrictor(title:String): this(title + name){} }
-
初始化执行顺序
那么主构造函数、次构造函数以及init方法执行顺序是啥呢.
class Test(name:String) {
init {
println("init:$name")
}
constrictor(title:String): this(title + name){
println("constrictor:$title")
}
}
fun main() {
Test("你","瞅啥")
}
执行结果,如下所示
init:你瞅啥
constrictor:瞅啥
通过测试,得到的执行顺序是主构造->init->次构造.