目录
Kotlin的垮平台特性:
Kotlin不仅支持编写代码在虚拟机上运行,而且还是一门垮平台的通用型语言,我们可以用Kotlin开发各种类型的原生应用,如Android、 macOS, Windows, Javascript应用。
Kotlin能脱离虚拟机层,直接编译成可以在Windows、Linux和macOS平台上运行的原生二进制代码。
声明变量:
内置数据类型:
变量:
- 要声明可修改变量,使用var关键字
- 要声明只读变量,要使用val关键字
类型推断:
对于已声明并赋值的变量,它允许你省略类型定义(但是多态情况下得用泛型)
编译时常量:
定义常量的关键字是const
注意要点
- 只有在单例类,companion object或顶层方法中才可以使用const关键字。
- 编译时常量只能在函数之外定义,因为编译时常量必须在编译时赋值,而函数都是在运行时才调用,函数内的变量也是在运行时赋值,编译时常量要在这些变量赋值前就已经存在
- 编译时常量只能是常见的基本数据类型:String,Int,Double,Float,Long,Short,Byte,Char,Boolean
- 只能在函数之外,不能不赋值和给null值,变量名大写
查看Kotlin字节码:
查看Kotlin编译之后的字节码,有助于我们深入理解Kotlin语言
两种方式
- Shift键两次,输入Show ktlin
- Tools ->Kotlin->Show Kotlin Bytecode
查看字节码后发现const val MAX =200 相当于 public final static I MAX = 200
Kotlin的引用类型与基本数据类型:
- Java有两种数据类型: 引用类型与基本数据类型
- Kotlin只提供引用类型这一种数据类型,出于高性能的需要,Kotlin编译器会在java字节码中改用基本数据类型
range表达式:
in A..B, in关键字用来检查某个值是否在指定范围之内
fun main(){
val age =4
if(age in 0..3){
println(age)
}else if(age in 3..10){
println("未知")
}
if (age !in 0..3 ){
println("不存在")
}
}
when表达式:
- 允许你编写条件式,在某个条件满足时,执行相应的代码相当于java中的switch case但是比它更好用
- 只要代码包含 else if分支,都建议用when表达式
- 最后执行的代码会作为返回值返回
fun main(){
val school = "小学"
val level = when(school){
"学前班" -> "幼儿"
"小学" -> "少儿"
else -> {
println("未知")
}
}
println(level)
}
String模板:
- 在字符串的双引号内用$加变量名转换为字符串
- 还支持字符串里计算表达时的值并插入结果,但要在$后加{},添加在{}中的任何表达式,都会作为字符串的一部分值
fun main(){
val origin = "Jack"
val dest = "Rose"
println("$origin love $dest")
val flag = false
println("Answer is: ${if(flag) "没关系" else "对不起"}")
}
函数:
访问修饰符默认时public
fun main(){
doSomething(5,false)
}
private fun doSomething(age:Int, flag: Boolean):String{
return "result"
}
函数参数:
默认参数
如果不打算传入值参,可以预先给参数指定默认值
具名函数参数
如果使用命名值参,就可以不用管值参的顺序
fun main(){
fix("小米",5)
fix("小米")//不传值则会使用默认的缺省值
fix(age=10,name="小米")//具名参数可以不用管函数赋值的顺序
}
fun fix(name:String, age:Int = 2){
println(name + age)
}
Unit函数:
不是所有函数都有返回值,Kotlin中没有返回值的函数叫Unit函数,也就是说它的返回类型是Unit。在Kotlin之前,函数不返回任何东西用void描述,意思是“没有返回类型,不会带来什么,忽略它”,也就是说如果函数不返回任何东西,就忽略类型。但是,void这种解决方案无法解释现代语言的一个重要特征,泛型(因为泛型要求你有个类型)。
Nothing类型:
TODO函数的任务就是抛出异常,就是永远别指望它运行成功,返回Nothing类型。
反引号中的函数名:
为了支持Kotlin和Java互操作,而Kotlin和Java各自却有着不同的保留关键字,不能作为函数名,使用反引号括住函数名就能避免任何冲突。
新建个java类
在kotlin文件中调用