-
只读变量
要声明可修改变量,使用var关键字。
要声明只读变量,使用val关键字。
//可修改变量
var name:String = "hello world"
name = "hello china"
//只读变量
val age:Int= 20
age = 30 //这行会报错,因为val声明为只读
-
类型推断
对于已声明并赋值的变量,kotlin允许省略类型定义。比如上面的代码可以修改为:
var name = "hello world"
val a = 5
- 只读变量并非绝对只读。
-
编译时常量只能在函数之外定义,因为编译时常量必须在编译时赋值,而函数都是在运行时才调用,函数内的变量也是在运行时复制,编译时常量要在这些变量赋值前就存在。
- 编译时常量只能是常见的基本数据类型:String,Int,Double,Float,Long,Short,Byte,Char,Boolean
const val MAX = 200
fun main() {
const val MIN = 2//报错
}
- java有两种数据类型:引用类型与基本数据类型。
- kotlin只提供引用类型这一种数据类型,处于更高性能的需要,kotlin编译器会在java字节码中改用基本数据类型。
- 我们可以在kotlin字节码代码中查,双击shift选用show kotlin bytecode
- if/else if表达式与java是一样的
- range表达式
in A..B,in关键字用来检查某个值是否在指定范围之内,in后面可以接list,set等,!in 表示不在这个指定范围。
val age = 14
if (age in 0..18){
println("未成年")
}else if (age in 18..60){
println("中年")
}else{
println("老年")
}
- when表达式
- 允许你编写条件式,在某个条件满足时,执行对应的代码。
- 只要代码包含else if分支,都建议改用when表达式。
val school = "小学"
val level = when(school){
"学前班" -> "幼儿"
"小学" -> "少儿"
"大学" -> "青少年"
else ->{
println("未知")
}
}
println(level)
- 模板支持在字符串的引号内放入变量值
- 还支持字符串里计算表达式的值并插入结果,添加在${}中的任何表达式,都会作为字符串的一部分求值。
val origin = "Jack"
val dest = "Rose"
println("$origin love $dest")
//fun是函数的关键字,如果不声明private,默认是public,这段函数意思为入参是一个int和一个string,返回是一个string
//如果不打算传入值参,可以预先给参数指定默认值
//比如在插件化框架中的startActivity有好多的重载函数,这时候可以用kotlin的特性,具名函数,
//直接调用的时候为 doSomething(name = "2",age = 222),这时候参数顺序都可以随意写
private fun doSomething(age:Int = 2,name:String):String{
return "i do"
}
-
Unit函数
不是所有的函数都有返回值,kotlin中没有返回指的函数叫Unit函数,也就是说他们的返回类型是Unit。在kotlin之前,函数不返回任何东西用void描述,意思是“没有返回类型,忽略它”,也就是说如果函数不返回任何东西,就忽略类型。但是void这种解决方案无法解释现代语言的一个重要特性,泛型!
-
Nothing类型
TODO函数的任务就是抛出异常,返回Nothing类型。
fun main() {
TODO()
}
Exception in thread "main" kotlin.NotImplementedError: An operation is not implemented.
at study01.NimingfuncKt.main(Nimingfunc.kt:5)
at study01.NimingfuncKt.main(Nimingfunc.kt)
- kotlin可以使用空格和特殊字符对函数命名,不过函数名要用一对反引号括起来
- 为了支持kotlin和java互操作,而kotlin和java各自却有着不同的保留关键字不能作为函数名,使用反引号括住函数名就能避免任何冲突。
网友评论