一、创建或声明

44 阅读3分钟

创建文件

Kotlin文件以.kt后缀结尾,文件头部一般为包声明。
与import、package关键字同级的作用域即为顶级作用域,Kotlin文件内允许在一个文件内创建多个顶级class,允许直接在文件中声明顶级函数和属性。如果Kotlin文件内含有顶级函数或属性,编译时会生成以文件名加“Kt”命名的class文件,其中的顶级函数或属性编译为这个class的静态方法或静态变量。
Kotlin代码以换行符为结束标识,末尾无需写;

导入外部引用

导入外部包的写法与Java一致:

package com.demo.kotlin //包声明
import java.util.* //外包引入

const val name1: String = "name1" //顶级属性
fun main(args: Array<String>) { //顶级函数
    System.out.println("Hello World")
}

声明类/接口

使用class关键字定义一个类,使用interface关键字定义一个接口,使用:表示继承关系,多个父类使用,隔开。Kotlin中的class默认是不可继承的,类似在Java中被final修饰,如果需要被继承则必须添加open关键字。

interface A {
    fun funcA()
}

abstract class B {
    abstract fun funB()
}

open class C : A, B() { //继承类和抽象类必须声明调用父类的构造函数
    override fun funcA() {
        System.out.println("funcA")
    }

    override fun funB() {
        System.out.println("funcB")
    }
}
class D :C(){} //class C如果没有标注open则无法继承

声明变量

一般格式为:var/val <变量名称> : <变量类型> = <初始化值>; val声明变量不可更改,类似Java中的final,使用var声明可更改的变量。

var a: Int = 0
val b: Boolean = false

变量类型可通过赋值确定时,可以省略声明变量类型:

var a = "abc"//String类型
val b = false//boolean类型

Kotlin中变量默认是不可以设置为null的,会对赋值进行非空判断,一旦赋值null则会抛出异常,如果需要对象可赋值null,必须在变量类型后加上

var a: String? = null
val b: Boolean? =null

属性声明的完整语法:

var/val <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]

Kotlin帮我们创建了默认的settergetter,如果有需要也可以复写:

var str: String? = null
    //field代表对象实际引用
    set(value) {
        field = value ?: "" 
    }
    get() {
        return field ?: ""
    }

声明函数

函数定义使用关键fun,一般格式为:fun <泛型(可选)> <函数名称>(<参数1名称> : <参数1类型>,... ):<返回类型>
如果没有返回值可以省略返回类型,或者使用Unit

fun <T> funcTest(param: String, t: T): Int

Kotlin中的返回值默认也是不允许为null的,如果方法可能返回null,必须在返回值类型后加上?。需要注意没有声明返回值类型的方法也是不能返回null的,如Unit

fun funcTest(t: Int?): Unit {
    return Unit//返回Kotlin中的Unit单例,或者什么也不返回
}
fun funcTest2(t: Int?): Unit {
    return null//仅能且必须返回null
}

Kotlin中class内方法默认也是被final修饰的,复写前需要添加open关键字。

简化函数声明: 可以直接使用return一个表达式,跳过局部的声明,或者直接使用赋值运算符省略=最外层括号和return

fun testFunc(type: Int): String {
    return if (type < 0) {
        "type < 0"
    } else {
        "type >= 0"
    }
}
fun testFunc(type: Int): String = if (type < 0) {
    "type < 0"
} else {
    "type >= 0"
}

可变长参数函数: 参数名称前添加vararg修饰:

fun testFunc(vararg type: Int): String {
    return type.size.toString()
}