基础语法
定义函数
public int method(int a,int b){
// todo
return a+b;
}
复制代码
fun method(a:Int,b:Int):Int{
return a+b
}
复制代码
- 在kotlin中所有东西都是对象,所以java中的基本数据类型(int,long,boolean,double,short,float,byte)在kotlin中都要使用其对应的封装的类(Int,Long,Boolean,Double,Short,Float,Byte)。 注意:1、在kotlin中数字类型不能隐式的装换(例如:java中int转换为long类型)2、当kotlin函数无返回值时,将Int替换为Unit,或者将其省略
定义变量
private final int a;
public int b=1;
String c;
复制代码
private val a:Int?=1
public val b=1
lateinit var c:String
private val d:Int by lazy { 1 }
复制代码
- 在kotlin中用var和val声明变量与常量
- 注意:1、在声明时正常情况下必须要初始化变量 2、若想变量可为null则需在声明的类型后加‘?’ 3、若不想在声明时初始化,可以在var之前添加关键字lateinit(val不支持lateinit) 4、val可以使用by lazy 关键在延迟初始化时间(在其第一次调用时初始化)
使用可空值及 null 检测
String a=null;
if(a!=null){
int size=a.length();
}
复制代码
var a:Strng?=null
var size=a?.length
var size2=a!!.length
复制代码
- 在kotlin中使用可能为空的参数时,需要通过‘?’判断当前参数是否为空,若为空‘?’之后的逻辑就不会执行。还可以使用‘!!’来判断是否为空,但参数为空时其会直接抛出空指针异常。
使用类型检测以及自动转换
public String get(Object obj){
if(obj instanceof String){
String s=(String)obj;
return s;
}
return null;
}
复制代码
fun get(obj:Any):String?{
if(obj is String){
return obj
}
return null
}
复制代码
- kotlin中通过is来判断前面类型是否为后面类型的实例 ; 若某个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中就可以直接当做该类型使用,无需显示转换,例如 : 上述代码的obj.
- 注意:kotlin中Any相当于java中的Object是所有类的父类。
for循环的使用
public void test(List<Stirng> list){
int size=list.size;
for(int i=0;i<size;i++){
System.out.println("list 第"+i+"个数据:"+ list.get(i));
}
}
复制代码
fun test(list:ArrayList<String>){
for(item in list){
println("list item:$item")
}
for(item in list.indices){
println("list 第$item 个数据:${list[item]}")
}
for((index,item) in list.withIndex()){
println("list 第$index 个数据为:$item")
}
}
复制代码
- kotlin 通过in关键字遍历数据,上述代码,第一个for循环直接取出list中的数据;第二个for循环是取出list索引可以通过索引取出数据;第三个for循环可以同时取出索引和数据进行遍历。
when表达式的使用
public void test(int a){
switch(a){
case 1:
// todo
break;
case 2:
// todo
break;
default:
// todo
break;
}
}
复制代码
fun test(a:Int){
when(a){
0,1->{
//todo
}
2->{
//todo
}
in 3..10->{
//todo
}
else{
//todo
}
}
}
复制代码
- kotlin中的when表达式与java的switch类似。
- 多个条件执行相同的逻辑时,可以使用逗号将其隔开;
- 对于范围条件可以使用in 关键字,在in 前加上'!'则表示取反;
(range)区间
fun test(a:Int){
//检测一个数是否在某个范围
if(a in 1..10){
println(x)
}
//检测某个数是否在区间之外
var list=listOf(2,3,4,5)
if(-1 !in 0..list.lastIndex){
println("-1 不在 list范围内!")
}
//区间迭代
for(x in 1..10){
println(x)
}
for(x in 1..10 step 2){
prinlnt(x)
}
for(x in 9 downTo 0 step 3){
println(x)
}
}
复制代码
- kotlin中区间可以使用x..y表示,其含义是x到y之间的数包括x和y且x<y,若x>y则使用downTo;
- step x表示每次迭代需要加或减x个数;
集合与数组
//声明空数组
var list= arrayOfNulls<Any>(2)
//声明有初始值的数组
var list1= arrayOf(1,2,3,4)
//声明List
var list=ArrayList<String>()
//声明List并且初始化
var list3= listOf(1,2,3)
复制代码