美文网首页
kotlin语言学习03 ——kotlin语法与java不同点

kotlin语言学习03 ——kotlin语法与java不同点

作者: LiangLliu | 来源:发表于2019-12-19 15:51 被阅读0次

kotlin语法与java不同点

注意 :
本小节的语法主要是讲和java不同的地方,这样可以调高学习效率

一、kotlin变量和常量的定义

1、常量的定义,关键字val

1.1、示例:

val a: Int = 1

val在kotlin中相当于Java中的final,我们可以看到使用val定义后的 'a',不能再次赋值,会报错。


val定义常量

1.2、kotlin中使用了val定义之后,虽然不能对再次,但是可以修改val指向内容进行修改

fun main() {
    // 给m一个整形数组
    val m = intArrayOf(1, 2, 3)
    // 修改数组中 第一个位置的值 的值
    m.set(0, 4)

    for (it in m) {
        print(it)
        print(" ")
    }
    // 4 2 3
}

2、变量的定义,关键字 var

示例:

/**
 * @var : 常量的定义
 */
fun variableDefine() {
    var b: Int = 5
    b = 7
    println(b)
}

使用var关键字定义常量
在定义变量时候,也可以不定义类型,通过类型推断可以确定值的类型。

var b = 5

二、kotlin注释的使用

kotlin的注释和java基本一致,不同的是,Java中的块注释不允许嵌套,而kotlin是允许注释嵌套的。

kotlin注释

三、kotlin的类型赋值

在Java中可以允许小范围的值赋值给大范围的值,
例如: byte ---> int
但是在kotlin中是不允许的,只允许相同类型之间的赋值。
示例:

/**
 * 类型赋值
 */
fun typeSssignment() {
    var a: Int = 10
    var b: Byte = 20
    a = b
}
kotlin直接类型赋值报错

我们可以看到IDEA报错并提示,如果需要赋值的话就需要转换后再赋值。

a = b.toInt()

四、kotlin函数定义

kotlin中函数的定义格式和Java中也有很大的不同。

1、kotlin主函数

在kotlin新的语法中,主函数可以省去括号中的参数。

fun main() {
    println("hello world")
}

2、函数定义

1、kotlin 定义一个函数求两个数之和

/**
 * TODO : 定义函数求两个数之和
 */
fun sum(a: Int, b: Int): Int {
    return a + b
}

我们可以发现kotlin中类型的定义是: 变量 : 类型
函数的返回值则是: 函数名 : 值

2、对上面的代码进行简化

fun sum2(a: Int, b: Int) = a + b

上面通过lambda方法进行简化,a 加 b 之和的类型通过推断的方式得出。

3、定义一个没有返回结果的函数

// TODO: 一个函数不返回结果,可以加上Unit或者直接省略
fun noResult(a: Int, b: Int): Unit {
    println(a + b)
}

五、kotlin字符串中打印参数

1、在Java中我们可以使用字符串拼接的形式打印参数,但是会在kotlin中报错。


字符串拼接变量报错

2、使用 '$ 符号取值

字符串中使用 $ 符号取值

在kotlin中可以使用 $ 符号读取字符串中变量的值。
在kotlin不能不同类型的数值用 + 拼接的原因是,kotlin不能进行不同类型的转换。

六、kotlin包的概念

1、kotlin 包的概念是逻辑上的,在java中包的位置必须跟磁盘的位置一直,但是在kotlin中不是这样

修改包的名称不会报错

以上程序也可以正常的运行,但是为了编码上的清晰,我们还是和Java中包的概念一致。

2、kotlin在使用函数的时候,导入函数所在的包即可。

例如:


kotlin使用函数时导包

3、kotlin在函数调用的时候可以给函数重新命名,使用 as 关键字。


kotlin给包中的函数重命名

七、kotlin流程控制

kotlin的流程控制相比Java有很大的简化的地方

1、if--else 的使用

举例:求两个数的最大值,并且赋值。
在之前的做法

fun main() {
    var a = 10
    var b = 20

    var max: Int
    var min: Int

    // TODO : 计算 两个数中的最大值
    if (a > b) {
        max = a
        min = b
    }else {
        max = b
        min = a
    }
    println("max = $max , min = $min ")
    
}

在kotlin中可以这样用

/**
 * Kotlin中的流程控制
 */
fun main() {
    var a = 10
    var b = 20

    var max = if (a > b) a else b
    var min = if (a > b) b else a
    
    println("max = $max , min = $min")

}

2、kotlin结果可能为空时候,可以给返回值后面加上 ' ? '

2.1、举例一 Int? 的使用 :

fun main() {

    println(strToInt("23")) // 23
    println(strToInt("ab")) // null
}


/**
 * kotlin中对异常的处理,
 * 举例: 将字符字符串转换为整数,但是有的情况下字符串并不能转换为整数,此时需要输出 null
 * 如果返回结果定义为 Int ,就表示结果已定位整数。
 * @Int? : 表示结果为一个整数,可能为空
 */
fun strToInt(str: String): Int? {
    try {
        return str.toInt()
    } catch (ex: NumberFormatException) {
        return null
    }
}
fun printMuitiply(a: String, b: String) {
    // 将两个字符串转换成整数
    var aTInt = strToInt(a)
    var bTInt = strToInt(b)

    if (null != aTInt && null != bTInt) {
        println(aTInt * bTInt)
    }
}

2.2、举例二 :

fun main() {
    printMuitiply("22","66") // 1452
    printMuitiply("22","aa") // Parameters can not be converted to plastic surgery
}

/**
 * 将字符串转换成整数,并求两个数之积
 */
fun printMuitiply(a: String, b: String) {
    // TODO : 将两个字符串转换成整数
    var aTInt = strToInt(a)
    var bTInt = strToInt(b)

    if (null != aTInt && null != bTInt) {
        println(aTInt * bTInt)
    } else {
        println("Parameters can not be converted to plastic surgery")
    }
}

/**
 * kotlin中对异常的处理,
 * 举例: 将字符字符串转换为整数,但是有的情况下字符串并不能转换为整数,此时需要输出 null
 * 如果返回结果定义为 Int ,就表示结果已定位整数。
 * @Int? : 表示结果为一个整数,可能为空
 */
fun strToInt(str: String): Int? {
    try {
        return str.toInt()
    } catch (ex: NumberFormatException) {
        return null
    }
}

相关文章

网友评论

      本文标题:kotlin语言学习03 ——kotlin语法与java不同点

      本文链接:https://www.haomeiwen.com/subject/dwomnctx.html