kotlin-3

一、类的声明

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的用武之地,我们可以把初始化执行语句放置在此处,为属性进行赋值。
 

猜你喜欢

转载自blog.csdn.net/yangbin0513/article/details/106266604
今日推荐