- Kotlin语言简介
kotlin之所以能在java虚拟机上运行,是因为kotlin会在编译的时候生成java虚拟机能够识别的字节码文件,也就是java编译后一样规格的.class文件。
kotlin在语言安全性方面下了很多功夫,几乎杜绝了空指针异常这个全球崩溃最高的异常。
2.如何运行kotlin代码
①使用IntelliJIDEA,对kotlin的支持非常好,可以直接创建kotlin项目,独立运行kotlin代码。
②在线运行kotlin代码,为了方便开发者体验kotlin编程,JetBrains专门提供了一个可以在线运行kotlin的网站,
地址为:https://try.kotlinlang.org(国内体验感有限,和GitHub的痛点一样吧)
③使用AndroidStudio(后续文中均称为AS),新建项目后在MainActivity同级目录下可以创建kotlin文件,在这里写就行。
3.变量和函数
①变量
在kotlin中只允许在变量前声明两种关键字
val(value的简写)用来声明一个不可变的变量,对应java中的final变量
var(variable的简写)用来声明一个可变的变量,对应java中的非final变量
kotlin拥有出色的类型推导机制
例:val a = 10
(kotlin每一行代码的结尾是不用加分号的)
这里定义一个变量a,赋值为10,会被自动推导成整形变量,其他类型同理
如果对一个变量延迟赋值的话,kotlin的自动推导机制不生效,此时需要进行显示声明变量类型,语法如下
val a : Int = 10
在显示声明类型后,不可再把其他类型的变量赋值给a,否则编译器抛出类型不匹配的异常
Kotlin完全抛弃了java中的基本数据类型(虽然只相差了一个字母,Int与int),全部使用了对象数据类型。在java中int是关键字,而在kotlin中Int变量成为了一个类,它拥有了自己的方法和继承结构
永远优先使用val声明一个变量,如果没有办法满足需求的 时候再去改为var
4.函数
函数function其实和方法是同一个概念
java中倾向于叫方法,而kotlin中倾向于叫函数
定义函数的关键字fun,语法如下
fun methodName(param1 : Int ,param2 : Int):Int{
return 0;
}
对于()后面的:Int是用来指定函数返回值类型的
尝试定义一个有意义的函数
fun largeNumber(num1:Int,num2:Int):Int{
return max(num1,num2)
}
这里用到了kotlin中的一个内置函数max()
建议经常使用AS的代码补全功能,不仅补全代码,还能自动导入相应的包,手敲相应的函数没有导入包很可能报错
第一个语法糖,当一个函数只有一行代码时,kotlin允许我们不必写函数体,可以直接将其写在函数定义尾部,中间用等号连接,例如
funlargeNumber(num1:Int,num2:Int):Int=max(num1,num2)
并且由于类型自动推导机制,还可以进一步化简
funlargeNumber(num1:Int,num2:Int)=max(num1,num2)
5.程序的逻辑控制
①if条件语句
Kotlin中if用法与java中的一致,不同的是,kotlin中的if是可以有返回值的,返回值就是if语句每一个条件中的最后一行代码的返回值。因此上面的代码还可以化简
实际上value也可以不要,可以直接写到return中
再结合前面的语法糖,直接使用“=”作为返回,省略return等,进一步简化
或者这样
②when条件语句
kotlin中的when有点类似于java中的switch
java中switch的缺陷:switch只能传入整形或短于整形的变量作为条件,jdk1.7后增加了字符串变量的支持,但如果你的帕努单逻辑使用的不是上述变量是不支持的,另外就是每次case条件后就要break,不然程序一直往下依次执行
我们来看一下一个成绩查询功能,输入姓名返回学生考试成绩(开头是fun,打多了个‘’)
以上也用到了单行代码的语法糖,用了等号省略return
下面我们看一下用when来改写上述方法
kotlin中,when是允许传入任意类型参数的,并且和if一样拥有返回值,格式为:
匹配值 ->{执行逻辑}
如果只有一行代码,{}也可以省略
除了精确匹配,when还可以进行类型匹配
示例如下:
这里用到了关键字is,相当于java中的instanceof关键字。
由于checkNumber()函数接收一个Number类型的参数,这是kotlin内置的一个抽象类,像Int Long Float Double等于数字相关的类都是它的子类,可以用来判断传入的参数类型,示例如下:
输出为参数类型,或者是不支持
when还有一种不带参数的用法(kotlin中判断字符串或对象是否相等可以直接使用呢==关键字,不像java中要调用equals()方法)
③循环语句
java与kotlin的while用法和使用技巧一致,此处忽略
java中常用的for-i循环在kotlin中被直接舍弃,java中的for-each循环被kotlin大幅加强变成了for-in循环
kotlin中有区间的概念,
其中两端闭区间关键字为…
例如:val range = 0 … 10
实际表示的是[0,10] 就是数学上的区间呗
左闭右开的区间关键字为until
例如:val range = 0 until 10
实际表示[0,10)
再回到刚刚的for-in循环介绍
感觉挺亲和的,毕竟in在英语中解释为在什么里面
所以就是i在集合[0,10]中遍历打印
如果有想跳过的元素,使用step关键字
step是用来改变递增关系的,原先默认遍历一次增加1,用了step之后就会改变递增值,直接代码实例
…和until关键是都是用于升序区间的,要求左端必须小于右端,但如果希望降序呢?用downTo关键字



