kotlin学习笔记
最近kotlin已经成为android开发的首选语言,这里做一个学习kotlin的笔记
包声明和导入
- package
说明当前的文件在哪个包内 - import
引入其他的包或者函数
变量的定义和使用
//var定义可变变量
var <标识符> : <类型> = <初始化值>
var x = 5 // 系统自动推断变量类型为Int
//val定义的变量只能赋值一次,类似于java的final
val <标识符> : <类型> = <初始化值>
变量在引用前必须先赋值(初始化)
函数的定义
//经典定义
fun sum(a: Int, b: Int): Int { // Int 参数,冒号后面的Int代表返回值 Int
return a + b
}
//以表达式作为返回结果,可以省略返回类型(不建议省略)
fun sum(a: Int, b: Int) = a + b
//无返回值(void)可以省略
public fun printSum(a: Int, b: Int) {
print(a + b)
}
NULL检查机制
这是kotlin相比与java的一个优点
定义可为空的变量
//类型后面加?表示可为空
var age: String? = "23"
对于NULL的处理方式
//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1
字符串模板
符号 | 含义 |
---|---|
$ | 表示一个变量名或者变量值 |
$varName | 表示变量值 |
${varName.fun()} | 表示变量的方法返回值 |
/*****定义一个类******/
class User {
var name: String? = null
var age: String? = null
}
/********应用********/
val user = User()
//赋值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age
var userInfo = "name:${user.name}, age:$age"
//输出结果:name:tutu, age:23
区间
用1…4来表示从1到4
流程控制
选择
if和else和java一样用就行了,下面介绍功能强大的when
- when
// 测试值 x = 0, -1, 1, 2, 3, 6, 10
var x = 10
when (x) {
//常量
2 -> println("等于2")
//数值表达式
if (x > 0) 1 else -1 -> println("大于0并等于1,或小于0并等于-1")
//Boolean类型表达式
in 1..5 -> println("范围匹配1-5")
!in 6..9 -> println("不是6-9")
is Int -> println("类型判断")
else -> println("else")
}
// 代替if...else if
when{
x > 6 && x <= 10 -> println("大于6小于等于10")
x < 6 -> println("小于6")
else -> println("else")
}
循环
while 和 do…while 同Java并无区别,for则有很大改变并多出了几个变种
- for
val list = arrayListOf("aa", "bb", "cc")
//递增for (int i = 0; i < list.size(); i++)
for (i in list.indices) {
print(list[i])
}
//递增for (int i = 2; i < list.size(); i++)
for (i in 2..list.size-1) {
print(list[i])
}
//递减for (int i = list.size() - 1; i >= 0; i--)
for (i in list.size - 1 downTo 0) {
print(list[i])
}
//操作列表内的对象
for (item in list) {
print(item)
}
//加强版
for((i, item) in list.witnIndex()) {
print(list[i])
print(item)
}
//变种版
list.forEach {
print(it)
}
list.forEach {
print(it)
}
list.forEachIndexed { i, s ->
print(list[i])
print(s)
}
list.forEachIndexed(object :(Int,String) -> Unit{
override fun invoke(i: Int, s: String) {
print(list[i])
print(s)
}
})
冒号的使用
//val表示常量var表示变量声明
val name: String = "tutu"
//省略类型说明
var age = "23"
//fun表示函数
fun getName(): String{
return "tutu"
}
//类继承
class UserList<E>(): ArrayList<E>() {
//...
}
//引用java的类
val intent = Intent(this, MainActivity::class.java)//类名::class.java
类的使用
待补充
- 可变长参数函数
- lambda(匿名函数)
- 菜鸟