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的类型赋值
在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
}
}
网友评论