- 可读、可读写、延迟初始化
var //可读写
val //只读
lateinit //晚一点再进行初始化,会被声明为可空类型
//可空类型,不可空类型
//平台类型
java中是通过注解实现可空类型和不可空类型(Nullable、NonNull)
var name: String? = null // ? 声明一个可空类型的变量
name?.length() // ? 安全调用,判空
name!!.length() // !! 强制调用,不判空
//Java中int float double long
对应kotlin->Int Float Double Long 不可空类型
//java中Int Float Double Long
对应kotlin->Int? Float? Double? Long? 可空类型
//声明一个延迟初始化的不可空变量
private lateinit name : String
静态类型编程语言:一个变量的类型一旦确定了就不能改变
动态类型编程语言:一个变量的类型可以随时改变。python\js\groovy
- 静态方法
//1、kotlin中没有static关键字
//2、kotlin中静态方法写法,文件中直接定义方法和变量,也叫顶层函数,包级函数
// a)java调用kotlin静态方法--->类名Kt.方法名()
// b) @file:JvmName("AAA")修饰后,在Java中可以使用AAA.方法名()调用。需要写在文件最上面,package之前
//object创建类并创建其对象
//object修饰的类,可以认为变量和方法都会被定义为静态的。其实是创建了CacheUtils的对象
object CacheUtils{
}
//在kotlin中调用使用CacheUtils.getXX()
//在Java中调用使用CacheUtils.INSTANCE.getXX()
//该方法其实是创建了这个类的单例对象去使用的。创建匿名内部类也使用object关键字
//非object的类里面使用
class MyApplication{
companion object {
fun getXX():String{}
}
}
//在Java中使用XX.Companion.
companion object {
//加上 @JvmStatic可以在Java类里面使用类名.方法名()调用
@JvmStatic
fun getXX():String{}
}
- 类型判断和转换
is instanceof
as 强转
AAA::class kotlin的class
AAA::class.java java的class
void对应Unit
Object对应Any
- switch case
when Java中switch的高级版,支持表达式
when (code){
in 200..299 ->{}
}
- 构造方法
construct(name:String) String super(name){}
- get set方法
set
//保证只生成一个公开的成员变量,而不是生成set get方法
@JvmField
var username:String? = null
- 数组
创建数组
arrayOf("a","b","c") 基本类型会自动装箱,因此基本类型不使用
intArrayOf(1,2,3)
数组长度size
arrayOf()
intArrayOf()
- 枚举
- 编译器常量
class XXX {
companion object {
//使用const关键字,类似于java中的static final String
private val const NAME = "张三"
}
}
- List、Map等集合类
//要么显示的声明类型
val list:ArrayList<String> = ArrayList()
//要么使用类型推断
val list = ArrayList()
//要么使用类型推断
val list = arrayListOf<String>()
//要么使用
val list = mutableListOf<String>()
//要么使用
val list:MutableList<String> = ArrayList()
//不能使用List,因为kotlin中List是不可修改的,没有add函数的
val list:List<String> = ArrayList()
//遍历
for (name : in list) {
}
- 内部类
//非静态内部类,需要inner修饰符
inner class XX {}
//静态内部类
class XXX {}
- internal
当前模块内可见,可以使某个public的类,仅在当前module内被访问到,其他moudle内访问不到
某些类,希望在当前module内到处哭访问,但是又不希望外部mudule访问。
- 内部类使用外部类this对象
internal class Outer {
internal inner class Inner {
var outer: Outer = this@Outer
}
}
- 受检异常
Kotlin 不需要使⽤ try-catch 强制捕获异常
- 声明接⼝/抽象类/枚举/注解
// 声明抽象类
abstract class
// 声明接⼝
interface
// 声明注解
annotation class
// 声明枚举
enmu class
- 编译期常量
在静态变量上加上 const 关键字变成编译期常量
- 标签
在 Java 中通过 「 类名.this 例如 Outer.this 」 获取⽬标类引⽤
在 Kotlin 中通过「 this@类名 例如 this@Outer 」获取⽬标类引⽤
- 遍历
for(item in items)
- 嵌套类
在 Kotlin 当中,嵌套类默认是静态内部类 (不持有外部类引⽤)
通过 inner 关键字声明为普通内部类 (内部使⽤外部对象时就会持有外部类引⽤)
- 可⻅性修饰符
默认的可⻅性修饰符是 public
新增的可⻅性修饰符 internal 表示当前模块可⻅
- open/final
Kotlin 中的类和函数,默认是被 final 修饰的 ( abstract 和 override 例外)
- 注释
注释中可以在任意地⽅使⽤ [] 来引⽤⽬标,代替 Java 中的 @param @link 等。
- ⾮空断⾔
可空类型强制类型转换成不可空类型可以通过在变量后⾯加上 !! ,来达到类型转换。
网友评论