Kotlin是不同于Java的一门新语言,它具有自己独特的语法规则。分下面几步进行阐释:
基本数据类型
Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。
变量&常量
Kotlin中不再要求在声明变量时对数据类型进行确定,统一使用变量或常量方式声明。
-
变量分为两类,分别是val 关键字修饰和 var关键字修饰。
- val x = 1,表明变量x不可修改,长度不可变。
- var x = 1,表明变量x可修改,长度可变。即,可以进行重新赋值。 -
常量需要用const 关键字修饰进行声明,不可修改和改变长度。
- private const val y = 3
数组
-
arrayOf()方式创建数组
[1,2,3]
val a = arrayOf(1, 2, 3) -
工厂模式创建数组
[0,2,4]
val b = Array(3) { i -> (i * 2) }
List
-
创建空列表
val emptyList = emptyList<String>() -
创建普通列表
val list = listOf<String>("aaa","bbb","ccc") -
创建可修改的列表
val mutList = mutableListOf<String>("111","222","333")
mutList[1] = "修改" -
创建含对象列表
val arrayList: ArrayList<Fruit> ?= ArrayList()
arrayList?.add(0,Fruit("苹果",1))
arrayList?.add(1,Fruit("梨",2))
Log.i(TAG,""+arrayList?.get(0)?.name) //Kotlin打印: 苹果
//值得注意的是,在Kotlin中创建实体类变得无比简洁:
//class Fruit(val name:String, val imageId:Int) //省略了get和set方法。可以直接通过"对象.属性"拿到值,这是Kotlin内部做好封装的。
特殊语法
-
“:”——继承
x:y表明x的父类为y,x继承自y,是y的子类。 -
“?”——非null执行
arrayList?.add()表明当arrayList不为null时执行add操作。因为Kotlin语言的一大特性:几乎杜绝了空指针这个全球崩溃率最高的异常,因此这个“?”的作用无比关键,会经常使用。
Tips:Kotlin语言不再使用分号作为语句的结尾。更加简洁了有没有!
循环语句
主要为for循环
-
循环区间
for (i in 1..9) -
循环+步长
for (i in 1..9 step 2) //顺序,步长为2 -
循环+downTo倒序
for (i in 4 downTo 1 step 2) //倒序,步长为2 -
循环+until排除
for (i in 1 until 4) //1-4 排除掉4
条件语句
Kotlin中推荐使用when语句进行条件甄别,但也能使用if……else。原因无它,Kotlin继承了Java的很多财富。
- 单条件分支
val x = 3
when (x) {
1 ->Log.i(TAG,"x = 1")
2 ->Log.i(TAG,"x = 2 ")
else -> { // 注意这个块
Log.i(TAG,"x 不是 1 ,也不是 2")
}
}
-
多条件分支
// 1,2 -> Log.i(TAG,"x = 1 或者2 ") (多分支条件写法)
函数声明
- 使用关键字fun,意为function函数。
举例(求和函数):private fun sum(a: Int, b: Int): Int = a + b
类型转换
- toByte(): Byte
- toShort(): Short
- toInt(): Int
- toLong(): Long
- toFloat(): Float
- toDouble(): Double
- toChar(): Char
位操作符
- and(bits) – 与
- or(bits) – 或
- !– 非
代码示例:
private const val TAG = "Kotlin打印"
private const val c = 3
@Route(path="/main/kotlin03_activity") //ARouter库的注解,用来处理Activity之间的跳转
class Kotlin03 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin03)
//变量
variable()
//函数
Log.i(TAG,"${sum(2,3)}") //Kotlin打印: 5
//循环
repeatExample()
//数组
arrayExample()
//字符串
stringExample()
//List
listExample()
//when条件语句,代替了Java中的if...else语句(但也能用,因为Kotlin完全继承了Java的财富)
whenExample()
}
//变量
private fun variable(){
//1、不可变
val a = 1
Log.i(TAG,"a = $a") //Kotlin打印: a = 1
//2、可变
var b = 1
b = 2 //重新对b赋值
Log.i(TAG,"b = $b") //Kotlin打印: b = 2
//3、常量
// private const val c = 3 //class之外声明+定义
Log.i(TAG,"c = $c") //Kotlin打印: c = 3
}
//函数,示例:求和
private fun sum(a: Int, b: Int): Int = a + b
//循环
private fun repeatExample() {
//循环区间输出
for (i in 1..9)
Log.i(TAG,"$i") //Kotlin打印: 1,2,3,4,5,6,7,8,9
//设置步长
for (i in 1..9 step 2) //顺序,步长为2
Log.i(TAG,"$i") //Kotlin打印: 1,3,5,7,9
//使用downTo倒序
for (i in 4 downTo 1 step 2) //倒序,步长为2
Log.i(TAG,"$i") //Kotlin打印: 4,2
//使用until排除
for (i in 1 until 4) //1-4 排除掉4
Log.i(TAG,"$i") //Kotlin打印: 1,2,3
}
//数组
private fun arrayExample() {
//[1,2,3] 第一种创建方式:使用arrayOf()
val a = arrayOf(1, 2, 3)
Log.i(TAG,"${a[0]}") //Kotlin打印: 1
//[0,2,4] 第二种创建方式:工厂模式
val b = Array(3) { i -> (i * 2) }
Log.i(TAG,"${b[1]}") //Kotlin打印: 2
}
//字符串
private fun stringExample() {
//简单输出字符串,$变量名
val i = 10
val s = "i = $i"
Log.i(TAG,"$s") //Kotlin打印: i = 10
//花括号任意表达式
val t = "runoob"
val str = "$t.length is ${t.length}"
Log.i(TAG,"$str") //Kotlin打印: runoob.length is 6
}
//List列表
private fun listExample(){
//1、创建空列表
val emptyList = emptyList<String>()
Log.i(TAG,""+emptyList) //Kotlin打印: []
//2、创建普通列表
val list = listOf<String>("aaa","bbb","ccc")
Log.i(TAG,""+list) //Kotlin打印: [aaa, bbb, ccc]
//3、创建可修改的列表
val mutList = mutableListOf<String>("111","222","333")
mutList[1] = "修改"
Log.i(TAG,""+mutList) //Kotlin打印: [111, 修改, 333]
//4、创建对象列表
val arrayList: ArrayList<Fruit> ?= ArrayList()
arrayList?.add(0,Fruit("苹果",1))
arrayList?.add(1,Fruit("梨",2))
Log.i(TAG,""+arrayList?.get(0)?.name) //Kotlin打印: 苹果
//值得注意的是,在Kotlin中创建实体类变得无比简洁:
//class Fruit(val name:String, val imageId:Int) //省略了get和set方法。可以直接通过"对象.属性"拿到值,这是Kotlin内部做好封装的
}
//when条件语句
private fun whenExample(){
//分支
val x = 3
when (x) {
1 ->Log.i(TAG,"x = 1")
2 ->Log.i(TAG,"x = 2 ")
// 1,2 -> Log.i(TAG,"x = 1 或者2 ") (多分支条件写法)
else -> { // 注意这个块
Log.i(TAG,"x 不是 1 ,也不是 2")
}
}
}
}