我是IT王魔王
这是我的第7篇IT系列原创
Kotlin系列我打算写出最适合初学者入门的文章
网上有很多文章,这些文章写的都不错
但是鄙人以为,这些文章有一个共同的特点(是优点,但同时也是缺点)
所以我用特点来形容
我一般不喜欢讲废话(这是一句废话,sorry)
能用图解决的尽量不用文字描述
java中的构造方法
/**
* java person 类
*/
public class Person {
String name;
int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
特点:
1、方法名与类名相同
2、不定义返回值类型
Kotlin中的构造方法
Kotlin中讲构造方法独立了出来,使用关键字constructor来表示。同时,Kotlin中将构造方法分为了两类:主构造方法和次构造方法
主构造方法,每个类最多有1个
依然拿我们的Penguin类(企鹅的意思)举例说明
为了不让大家看着蒙圈,我专门把空参/有参构造方法写在了一起,方便大家对比
主构造方法在类后面声明
1、空参主构造方法/有参主构造方法
2、constructor关键字可以省略
3、如果加权限修饰符,那么放到constructor前面,此时,就不能省略constructor关键字了
再次强调,当有了权限修饰符时,就不能省略constructor关键字了
到这里,有关主构造方法的声明语法就讲完了
接下来我们会有另外一个问题,怎么用?
当使用有参构造方法时,我们怎么使用主构造方法中的参数呢?
java中的使用
Kotlin的主构造方法是没有方法体的,这就意味着我们无法在主构造方法中进行任何操作。
但Kotlin为我们提供了一个init
代码块,这个代码块的执行顺序在主构造方法之后,次构造方法之前,我们可以在这个代码块中进行各种初始化的操作,包括访问主构造方法中的参数
/**
* kotlin 企鹅类
*/
class Penguin private constructor (name:String,age:Int) {
var name:String?=null //名称
var age:Int=0 //年龄
var weight:Int=100 //体重
//kotlin为我们提供了一个init代码块,
//init代码块的执行顺序在主构造方法之后
//我们可以在init代码块中进行各种初始化操作
//init代码块中可以访问主构造方法中的变量
init {
this.name=name
this.age=age
}
}
终于不用截图了,好轻松的说
到这里,主构造方法的声明加使用就讲完了。
现在我们讲一点有趣(奇怪)的知识
在上面这段代码里,有一个小问题
这个问题小白是不介意的,大神们是无法忍受的,例如我-----就能忍受。
言归正传,我们来看这段代码有什么问题
一个字:太繁琐。
Kotlin的设计理念之一就是要简洁,越简洁越好。让大家把节省下来的时间去做更重要的事情,例如撩妹。
在一个类中声明属性,通过构造方法传值进行初始化这种操作有没有很频繁,有没有很繁琐,虽然IDE给我们提供了快捷键,虽然你的手速也很快,但是要是能把这个过程“省略”掉就更完美了。
Kotlin让提供了这样的功能
主构造方法中声明属性
左侧的写法跟右侧的写法效果完全相同。
var换成val也可以
好了,到这里,主构造方法的知识就真的讲完了。
大家有没有觉得学到这里的时候觉得Kotlin很爽,腰不酸了腿不疼了,一口气上五楼不费劲了,奇怪的知识增加了。
次构造方法,每个类可以有N个
次构造方法声明在类中,依然使用constructor来声明
/**
* kotlin 企鹅类
*/
class Penguin {
var weight:Int=100 //体重
var age:Int=0
var name:String?=null
//空参次构造器
constructor(){ }
//有参次构造器
constructor(name:String,age:Int){
this.name=name
this.age=age
}
}
当构造方法中没有逻辑时候,大括弧可以省略
/**
* kotlin 企鹅类
*/
class Penguin {
var weight:Int=100 //体重
var age:Int=0
var name:String?=null
//空参次构造方法,如果没有逻辑,可以省略大括弧
constructor()
//有参次构造方法,如果没有逻辑,可以省略括弧,不过有参的空构造方法是没有意义的
constructor(name:String,age:Int)
}
当主构造器和次构造器同时存在时,次构造器必须直接或者间接调用主构造器
/**
* kotlin 企鹅类
*/
class Penguin constructor(name: String) {
var weight:Int=100 //体重
var age:Int=0
var name:String?=null
//空参次构造器,调用了下面的次要构造方法
constructor():this("奔波儿霸",10)
//有参次构造器,调用了主构造方法
constructor(name:String,age:Int):this(name){
this.name=name
this.age=age
}
}
构造方法调用构造方法的方式如代码所示,使用:this
来调用
执行顺序上,主构造器>init代码块>次构造器
与java相似,当我们不声明任何构造方法时,Kotlin编译器会默认给我们增加一个空参构造方法
/**
* kotlin 企鹅类
*/
class Penguin constructor() {
var weight:Int=100 //体重
var age:Int=0
var name:String?=null
}
如,当我们不声明任何构造方法时,Kotlin编译器会默认给我们增加一个构造方法(眼睛看不着,编译之后的代码会看到)
到这里,有关Kotlin中的构造方法就讲完了
总结一下
重点在主构造方法
当主构造方法和次构造方法同时存在,次构造方法必须调用主构造方法