创建文件
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帮我们创建了默认的setter
和getter
,如果有需要也可以复写:
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()
}