Kotlin基本语法

QuibblerQuibbler 2020-06-04 约 7 分钟 2085 次阅读

 Kotlin基本语法

了解Kotlin语言的基本语法。

1、包

kotlin文件以.kt结尾,编译文件还是如此只不过在文件名后面加上Kt后缀。这一点和Java不同,Java源文件.java,编译后为.class文件。

1.1、包定义

每个kotlin文件的第一行就用关键字package定义该文件所在的包。

例:

package main

fun main(args: Array<String>) {
    println("Hello Kotlin!")
 }

1.2、导包

用到其它kotlin文件需要使用关键字import导入,这一点和Java一样。kotlin会默认导入一些核心包,可以直接使用这些包中的方法和类。

kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*

例:

package main
import main.grammar.basic.Basic

fun main(args: Array<String>) {
    val value = Basic()
 }

2、变量与常量

kotlin中的常量,以及如何定义一个变量。

2.1、常量

常量值又称为字面常量,它是通过数据直接表示。

2.2、可变变量

可变变量用关键字var声明。

①定义的时候赋值,可以自动类型推断,可以省去类型

var b = 2

②只定义一个变量,但不赋值,这时必须指明变量的类型。否则报错:


2.3、不可变变量

不可变变量用关键字val声明。

① 用val关键字定义一个不可变变量。一旦赋值不可再次被复制。

val a: Int = 2

②可以在定义的时候不赋值,这一点和Java不同。

java用final定义不可变变量,必须在定义的时候初始化赋值

private static final int A = 1;

而kotlin可以在定义的时候不赋值,稍后再赋值。但是只能赋值一次,否则报错。


3、null

3.1、变量可空

当某个变量的值可以为null的时候,必须在声明处的类型后添加?来标识该引用可为空

val b: Int? = null

不加?而直接给变量赋null会报错:


3.2、方法返回可空

定义一个函数,一般没有返回值不写(或者写Unit),或者指定返回值类型。函数的定义参考2.1节。

fun compute(a: Int): Int {
    return a
}

在函数的返回类型后面加上?表示该函数的返回值可为null。

fun compute(a: Int): Int? {
    return a
}

3.3、null检查

①字段后加!!像Java一样抛出空异常

val b: Int? = null
    println(b)

        运行后打印输出:null

如果变量为空需要抛出异常,就加上!!

val b: Int? = null
    println(b!!)

        运行后抛出异常:Exception in thread "main" kotlin.KotlinNullPointerException

                                   at main.HelloKotlinKt.main(HelloKotlin.kt:13)

②字段后加?可不做处理返回值为null

val b: Int? = null
    println(b?.toString())

        运行后,判断到b为空,不调用toString()方法,直接返回null,即不作处理。

③用?:表达式做判空断处理

val b: Int? = null
    println(b ?: -1)

        运行时,如果b为空,则表达式取值为-1,否则取值b。

3.4、判空

判空这个开发中非常容易见到,到处都是(这也导致代码有点乱)。

val b: Int? = null
    if (b != null) {
        println(b)
    } else {
        println("b == null")
    }

4、类型检测/转换

使用关键字is判断变量是否是某种类型,相当于Java中的instance关键字。

fun isStringType(obj: Any): Boolean {
    return obj is String
}

做过类型判断以后,obj会被系统自动转换为目标类型

还有一个衍生的关键字!is,判断不是某种类型:

obj !is String

提一下Any类型,Kotlin类层次结构的根。 每个Kotlin类都有Any作为超类。相当于Java中的Object类。Any类具体介绍见《Kotlin继承》,Any超类定义如下:

/**
 * The root of the Kotlin class hierarchy. Every Kotlin class has [Any] as a superclass.
 */
public open class Any {
    public open operator fun equals(other: Any?): Boolean
    public open fun hashCode(): Int
    public open fun toString(): String
}

学习资料:

        Kotlin 基础语法

Java常量:Java常量的定义和分类

Kotlin (一) 复合符号( '?.' '?:' '!!' 'as?' '?' )

相关推荐

Parcelize:Parcelable 实现生成器
Kotlin

Parcelize:Parcelable 实现生成器

Parcelize:Parcelable 实现生成器Parcelable是安卓开发中常用的序列化方式,之前分享过一个Parcelable序列化插件,方便开发者快速生成代码,提高开发效率。1、Parcelize插件Kotlin官方也推出一个Parcelable自动生成的Gradle插件:Parcelize。1.1、引入插件在项目的build.gradle中添加:id("kotlin-parceliz

2.6k
Kotlin的继承
Kotlin

Kotlin的继承

Kotlin的继承1、超类:Any类似于Java中的Object类,Kotlin也有一个叫Any的超类,是所有类的父类,所有类都默认继承自该类。超类的定义如下,其中定义了三个函数:2、open注意上面的Any类用open修饰,表示该类可以被继承。Kotlin中的类默认都是final的,无法被继承:如果想让类可以被继承,就需要用在定义类的地方用open关键字标识该类可以被继承。3、构造器继承中涉及到

2.1k
Kotlin循环语句
Kotlin

Kotlin循环语句

Kotlin循环语句每门语言都要学一下循环语句,虽然每种语言都有for、while等循环,但总有些各自的特色。1、for循环for循环遍历集合或者数组,使用 in 关键字遍历任何提供迭代器。语法:例:先定义一个数组或集合array:遍历集合array:通常还需要用到索引index,调用集合的withIndex()方法参与循环遍历。例:使用下面的方式遍历for循环,同时获取元素当前索引index和当

2.1k