包的定义与导入

包的声明应处于源文件顶部:

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
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐