Kotlin学习总结(一)写个类

2019.07.01开始上手写kotlin,每日一更,立个flag

写一个类

类成员

类能够包含:
  • 构造函数与初始化块(总结这部份内容)
  • 函数
  • 属性
  • 嵌套类与内部类
  • 对象声明
Kotlin 中使用关键字 class 声明类

class HelloWorld{...}  //最简单的一个类就OK了,和java差很少的复制代码
类声明由类名、类头(指定其类型参数、主构造函数等)以及由花括号包围的类体构成。类头与类体都是可选的; 若是一个类没有类体,能够省略花括号。这种就不展现出来了。

构造函数

在 Kotlin 中的一个类能够有一个主构造函数以及一个或多个次构造函数。主构造函数是类头的一部分:它跟在类名(与可选的类型参数)后。

class HelloPeiqiTest constructor(str: String){
    //........
}复制代码
若是主构造函数没有任何注解或者可见性修饰符,能够省略这个 constructor 关键字。

class HelloPeiqiTest(str: String){
    //........
}复制代码
主构造函数不能包含任何的代码。初始化的代码能够放到以 init 关键字做为前缀的初始化块(initializer blocks)中。在实例初始化期间,初始化块按照它们出如今类体中的顺序执行,与属性初始化器交织在一块儿:

class HelloPeiqiTest constructor(string: String){
    var str="nihao"
    init {
        println("HelloPeiqiTest-init1")
    }
    var num:Int=21
    init {
        println("HelloPeiqiTest-init2")
    }
    init {
        println("HelloPeiqiTest-init3")
    }
}复制代码
主构造的参数能够在初始化块中使用。它们也能够在类体内声明的属性初始化器中使用

class HelloPeiqiTest(name: String){
    var str="nihao"+name.toUpperCase()
}复制代码

与普通属性同样,主构造函数中声明的属性能够是可变的(var)或只读的(val)。
若是构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,而且这些修饰符在它前面:

class HelloPeiqiTest private constructor(val name: String,val num:Int){
    init {
        println("HelloPeiqiTest-init1")
    }
}
复制代码

次构造函数

类也能够声明前缀有 constructor的次构造函数:

class HelloPeiqiTest{
    constructor(name:String){
        println(name)
    }
    init {
        println("HelloPeiqiTest-init1")
    }
}复制代码
若是类有一个主构造函数,每一个次构造函数须要委托给主构造函数, 能够直接委托或者经过别的次构造函数间接委托。委托到同一个类的另外一个构造函数用 this 关键字便可:

class HelloPeiqiTest(age:Int) {
    constructor(name:String,twoAge:Int):this(twoAge){
        println(name)
    }
    init {
        println("HelloPeiqiTest-init1")
    }
}复制代码
请注意,初始化块中的代码实际上会成为主构造函数的一部分。委托给主构造函数会做为次构造函数的第一条语句,所以全部初始化块中的代码都会在次构造函数体以前执行。即便该类没有主构造函数,这种委托仍会隐式发生,而且仍会执行初始化块:

class HelloPeiqiTest(age:Int) {
    constructor(name:String,twoAge:Int):this(twoAge){
        println(name)
    }
    init {
        //会先执行这个代码,再执行上面的println(name)
        println("HelloPeiqiTest-init1")
    }
}复制代码

若是一个非抽象类没有声明任何(主或次)构造函数,它会有一个生成的不带参数的主构造函数。构造函数的可见性是 public。若是你不但愿你的类有一个公有构造函数,你须要声明一个带有非默承认见性的空的主构造函数:

class HelloPeiqiTest private constructor {
    // 有一个生成的不带参数的主构造函数,默认的可见性是public,就是什么都不写。
    init {
        println("HelloPeiqiTest-init1")
    }
}复制代码
注意:在 JVM 上,若是主构造函数的全部的参数都有默认值,编译器会生成 一个额外的无参构造函数,它将使用默认值。这使得 Kotlin 更易于使用像 Jackson 或者 JPA 这样的经过无参构造函数建立类的实例的库。

class HelloPeiqiTest(age:Int=12) {
    init {
        println("HelloPeiqiTest-init1")
    }
}复制代码
建立类的实例
要建立一个类的实例,咱们就像普通函数同样调用构造函数,注意 Kotlin 并无 new 关键字。

fun main(args: Array<String>) {
    println("------------start----------")
    var mHelloPeiqiTest= HelloPeiqiTest()
    println("------------stop----------")
}
class HelloPeiqiTest(age:Int=12) {
    init {
        println("HelloPeiqiTest-init-$age")
    }
}复制代码
运行结果:

------------start----------
HelloPeiqiTest-init-12
------------stop----------复制代码
总结
类这部分主要讲的就是如何去建立一个类,觉得其初始化方法和构造函数,分为主构造函数和次函数,总体写法和java仍是有殊途同归之处,须要细细安装教程去写一次差很少都能理解能明白了,难点主要就在于次构造函数委托主构造函数的理解.
相关文章
相关标签/搜索