一、类的声明
Java声明一个类
public class Man {}
Kotlin声明一个类
class XXXXActivity
如果只声明一个空的类,Java和Kotlin的区别还是不大的。在Kotlin中如果没有类体,Kotlin可以省略大括号{}
。
二、构造函数
个类当中可以有一个主构造函数和多个次构造函数。
1.主构造函数
在Java中,如果不指定构造方法,编译器会默认生成一个不带参数的构造方法
public class User{
public User() {//默认生成
//可以在构造方法里修改代码
}
}
在Kotlin中,主构造函数是类头的一部分:它跟在类名后
class User constructor(userName: String) {
}
如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字
class User(userName: String) {
}
Kotlin的主构造函数不能包含任何的代码。初始化的代码可以放到以 init 关键字作为前缀的代码块中
class User(userName: String) {
init {
//...
}
}
2.次构造函数
Java中的构造方法
public class User {
public User(String userName) {
}
//次构造函数
public User(String userName, int age) {
}
//次构造函数
public User(String userName, int age, String sex) {
}
}
Kotlin的次构造函数前面必须加constructor关键字
class User(userName: String) {
//主构造函数的实现部分
init {
println(userName)
}
//次构造函数,可通过this调主构造函数
constructor() : this("czh")
//次构造函数,可通过this调主构造函数
constructor(age: Int) : this("czh") {
println(age)
}
//次构造函数,通过this调主构造函数
constructor(sex: String, age: Int) : this("czh") {
println("$sex$age")
}
}
//实例化User
User()
User("Czh")
User(2)
User("男",22)
运行代码,得到结果:
注意:在实例初始化期间,可以有多个init代码块,按照它们出现在类体中的顺序执行,如:
init {
println(1)
}
init {
println(3)
}
init {
println(2)
}
执行该段代码,打印顺序就是1->3->2
三、函数的参数
1.Kolin函数中的默认参数
Kotlin支持默认参数,在调用函数时不指定参数,就会使用默认参数,而Java并不支持默认参数。举个例子:
class User(userName: String = "Czh", age: Int = 22)
如果我们在实例化User的时候不传入参数,userName默认就是Czh,age默认就是22,如下所示:
var user = User()
如果在设置了默认值后,不想用默认值的话可以在创建实例时传入参数,如下所示:
var user = User("ABC" , 123)
2.Kolin函数中的命名参数
如果一个默认参数在一个无默认值的参数之前,那么该默认值只能通过使用命名参数调用该函数来使用,如下所示:
class User(userName: String = "Czh", age: Int)
var user = User(age = 22)
四、创建类的实例
Java使用关键字new
创建类的实例:
new User();
Kotlin没有new关键字,所以直接创建类的实例:
User()
注意:
这里需要注意几点:
关键字constructor:在Java中,构造方法名须和类名相同;而在Kotlin中,是通过constructor关键字来标明的,且对于Primary Constructor而言,它的位置是在类的首部 而不是在类体中 。
关键字init:init{}它被称作是初始化代码块 ,它的作用是为了Primary Constructor服务的,由于Primary Constructor是放置在类的首部,是不能包含任何初始化执行语句的,这是语法规定的,那么这个时候就有了init的用武之地,我们可以把初始化执行语句放置在此处,为属性进行赋值。