Kotlin 基本语法
包的定义与导入包的声明应处于源文件顶部:package org.examplefun printMessage() { /*……*/ }class Message { /*……*/ }// ……源文件所有内容(无论是类还是函数)都包含在声明的包内。 所以上例中printMessage()的全名是org.example.printMessage, 而Message的全名是org.example.Me
包的定义与导入
包的声明应处于源文件顶部:
package org.example
fun printMessage() { /*……*/ }
class Message { /*……*/ }
// ……
源文件所有内容(无论是类还是函数)都包含在声明的包内。 所以上例中 printMessage() 的全名是 org.example.printMessage, 而 Message 的全名是 org.example.Message。
如果没有指明包,该文件的内容属于无名字的默认包。
默认导入
有多个包会默认导入到每个 Kotlin 文件中:
手动导入
除了默认导入之外,每个文件可以包含它自己的导入指令。 导入语法在语法中讲述。
可以导入一个单独的名字,如.
import org.example.Message // 现在 Message 可以不用限定符访问
也可以导入一个作用域下的所有内容(包、类、对象等):
import org.example.* // “org.example”中的一切都可访问
如果出现名字冲突,可以使用 as 关键字在本地重命名冲突项来消歧义:
import org.example.Message // Message 可访问
import org.test.Message as testMessage // testMessage 代表“org.test.Message”
关键字 import
关键字 import 并不仅限于导入类;也可用它来导入其他声明:
顶层声明的可见性
如果顶层声明是 private 的,它是声明它的文件所私有的(参见 可见性修饰符)。
程序入口点
Kotlin 应用程序的入口点是 main 函数。
fun main() {
println("Hello world!")
}
注释
与大多数现代语言一样,Kotlin 支持单行(或行末)与多行(块)注释。
// 这是一个行注释
/* 这是一个多行的
块注释。 */
Kotlin 中的块注释可以嵌套。
/* 注释从这里开始
/* 包含嵌套的注释 */
并且在这里结束。 */
Kotlin声明变量和只读变量
Kotlin中使用val声明只读变量(对标java中的常量),使用var声明可读写变量(变量)

变量
定义只读局部变量使用关键字 val 定义。只能为其赋值一次。
val a: Int = 1 // 立即赋值
val b = 2 // 自动推断出 `Int` 类型
val c: Int // 如果没有初始值类型不能省略
c = 3 // 明确赋值
可重新赋值的变量使用 var 关键字:
var x = 5 // 自动推断出 `Int` 类型
x += 1
顶层变量
val PI = 3.14 // 顶级只读变量使用大写命名
var x = 0
fun incrementX() {
x += 1
}
当只读变量作为一个类的属性时,值是可以变化的
class X {
val b: Int // 作为属性时,只能叫只读变量,因为get到的值不一定相同
get() {
return (Math.random() * 100).toInt()
}
}
常量引用
val person = Person(19, 'china')
person.age = 19
编译期喝运行时常量
const val b = 3 // 编译时即可确定常量的值,并用值替换掉用处
val c: Int // 运行时才能确定值,调用处通过引用获取值
空值与 null 检测
当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ? 来标识该引用可为空。
如果 str 的内容不是数字返回 null:
fun parseInt(str: String): Int? {
// ……
}
使用返回可空值的函数:
fun printProduct(arg1: String, arg2: String) {
val x = parseInt(arg1)
val y = parseInt(arg2)
// 直接使用 `x * y` 会导致编译错误,因为它们可能为 null
if (x != null && y != null) {
// 在空检测后,x 与 y 会自动转换为非空值(non-nullable)
println(x * y)
}
else {
println("'$arg1' or '$arg2' is not a number")
}
}
Kotlin 空类型安全_胡椒粉0121的博客-CSDN博客放大舒服
https://blog.csdn.net/huangjianfeng21/article/details/122180418
类型检测与自动类型转换
is 运算符检测一个表达式是否某类型的一个实例。 如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换:
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` 在该条件分支内自动转换成 `String`
return obj.length
}
// 在离开类型检测分支后,`obj` 仍然是 `Any` 类型
return null
}
更多推荐

所有评论(0)