1.kotlin的简介
Kotlin是由JetBrains开发的针对JVM、Android和浏览器的静态编程语言,目前,在Apache组织的许可下已经开源。使用Kotlin,开发者可以很方便地开发移动Android应用、服务器程序和JavaScript程序。Kotlin可以将代码编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
Kotlin来源于一个岛屿的名字,全称是Kotlin Island,是英语【科特林岛】之意,这个小岛位于俄罗斯的圣彼得堡附近。之所以要命名为Kotlin,是因为Kotlin的主要开发工作就是由位于圣彼得堡分公司团队完成的。
2.kotlin的基础语法
函数定义
函数定义使用关键字fun
,参数格式为: 参数:类型
fun sum2(x: Int, y: Int): Int {
return x + y;
}
表达式作为函数体,返回值类型自动推断
fun sum(x: Int, y: Int) = x + y;
public 方法必须明确返回值类型,否则会报错
public fun sum3(x: Int, y: Int): Int = x + y;
无返回值的函数(Unit类似于java中的void,但是不等同于void)
fun sum4(x: Int, y: Int): Unit {
println(x + y)
}
可变长参数函数
函数的变长参数可以用 vararg
关键字进行标识, 此时参数是以数组的形式展示
// 打印参数
fun vararg(vararg variable: String) {
for (vars in variable) {
println(vars)
}
}
lamdba表达式
val list: MutableList<String> = ArrayList()
list.add("a")
list.add("b")
list.add("c")
list.add("d")
list.forEach(
Consumer { l: String ->
println(l)
}
)
定义常量和变量
可变变量定义: 使用var
关键字
var 标识符:类型=初始化值
不可以变量定义: 使用val
关键字
val 标识符:类型=初始化值
常量和变量都可以没有初始值,但是在引用前必须初始化
编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断
/**
* @定义常量和变量
* 可变变量定义: 使用var关键字
* 不可以变量定义: 使用val关键字
* var 标识符:类型=初始化值
* val 标识符:类型=初始化值
*
* 常量和变量都可以没有初始值,但是在引用前必须初始化
* 编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断
*/
var a: Int = 1
var b = 1
println(a)
println(b)//系统会自动推断变量类型为Int
val c: Int// 初始化时候必须提供变量类型
c = 2// 明确赋值
println(c)
var x = 5
x += 2 // 变量是可以被修改
println(x)
字符串模板
$
表示一个变量名或者变量值$varName
表示变量值$(varName.fun())
表示变量的方法返回值
/**
* @字符串模板
* $ 表示一个变量名或者变量值
* $varName表示变量值
* $(varName.fun())表示变量的方法返回值
*/
// 1.$varName表示变量值
var s = "wangliang";
var s1 = "i am $s";
println(s1) // 打印出 i am wangliang
// 2.$(varName.fun())表示变量的方法返回值
var s2 = "i am ${s.replace("wangliang", "wl")}";
println(s2)
Null检查机制
Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式:
1.字段后加!!像Java一样抛出空异常
2.另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理
/**
* @Null检查机制
* Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式:
* 1.字段后加!!像Java一样抛出空异常
* 2.另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理
*/
// 类型后面加?表示可以为空
var age: String? = null
// 抛出空指针异常
// var ages=age!!.toInt()
// // 不作处理 返回null
// val ages1=ages?.toInt()
// age为空返回-1
val ages2 = age?.toInt() ?: -1
println(ages2)
类型检测及自动类型转换
/**
* @类型检测以及自动类型的转换
* 我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。
*/
fun getStringLength(obj: Any): Int? {
if (obj is String) {
return obj.length;
}
return null;
}
区间
/**
* @区间
* 1.区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。
* 2.区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。
*/
// 输出 "1234"
for (i in 1..4) print(i)
println()
// 什么都不输出
for (i in 4..1) print(i)
println()
// 输出 "4321"
for (i in 4 downTo 1) print(i)
println()
// if 和区间的配合使用
val i=4;
val l=3;
if (i in l..10){ // 等同于 i>=l && i<=10
println(i)
}
// 使用 step 指定步长
for (i in 1..4 step 2) print(i) // 输出 "13"
println()
for(i in 4 downTo 1 step 2) print(i) // 输出 "42"
println()
for(i in 1 until 10) print(i) // 打印除了10
println()