基础语法
- 方法的定义
- 有返回值
fun test (a : Int , b : String) : Int { return 0 }
- 无返回值,Unit可省,vararg 可变参数 ,Int?可空,如图所示,第二个调用处未打印
打印:fun test(vararg v: Int?): Unit { v.forEach { Log.d(TAG, "test: $it") } } //测试 test(1, 2, 3) test()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A339u6DN-1628072579509)(https://i.bmp.ovh/imgs/2021/08/3ba83de863382345.png)] - 在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。
- 位操作符
/**
* 位操作符
*/
private fun test1(a: Int) {
//左移位 , shl 下相当于java的 <<
Log.d(TAG, "test1: ${a.shl(1)}") // a * 2的1次方
Log.d(TAG, "test1: ${a.shl(2)}") // a * 2的2次方
Log.d(TAG, "test1: ${a.shl(3)}") // a * 2的3次方
//右移位 , shl 下相当于java的 >>
Log.d(TAG, "test1: ${a.shr(1)}") // a / 2的1次方
Log.d(TAG, "test1: ${a.shr(2)}") // a / 2的2次方
Log.d(TAG, "test1: ${a.shr(3)}") // a / 2的3次方
}
//测试
test1(8)
打印如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I0Jsra4y-1628072579511)(https://i.bmp.ovh/imgs/2021/08/f42da5a33af59432.png)]
类和对象
- 嵌套类和内部类
class KtTest constructor(name: String) : AppCompatActivity() {
private var name: String = name
/**
* 嵌套类
*/
class TestClass {
//嵌套类不能访问外部类的方法/属性
val testClass = "TestClass"
}
/**
* 测试嵌套类
*/
fun testClass() {
//访问嵌套类的方法/属性,须嵌套类中的方法/属性是public的
Log.d(TAG, "testClass: ${KtTest.TestClass().testClass}")
}
/**
* 内部类
*/
inner class testInnerClass {
val name1 = name
fun test() {
Log.d(TAG, "test: 内部类访问外部类成员变量:$name1")
}
}
/**
* 测试内部类
*/
fun testInnerClassFun() {
KtTest("").testInnerClass().test()
}
}
- 密封类
//使用关键字sealed定义即可,但是没在项目中遇见过,看菜鸟教程说使用密封类的好处就是在使用when的使用不用else了,因为when表达式就已经把所有情况覆盖了。就这?
sealed class Expr