1.1. 低位数据类型转高位需要调用方法 如Byte转Int
val n : Byte = 10 val m : Int = 1;
m = n.toInt();
1.2. 字符Chat 类型不能直接对应ASCII 的数字
val c : Chat = 97 是错误的 写成 = 'a' 是可以的
1.3. arrayOf 是任意数值的数组,arrayOfNulls 指定长度的null数组,intArrayOf 指定类型的数组, Array() 数组
1.4. 保持原有样式的String
var s3 = """
hello
world
"""
val i = 10
val s1 = "i= $i"
1.5. 包名不是对应的文件夹,只是方便引用和区分调用的方法来自哪里,通过import 可以导入指定包 , import b.getName as bm 可以设定别名
1.6. if else 语句块 when 相当于switch
1.7. for(item in collection) 迭代循环, for((index,value) in arr.withIndex()) 索引迭代循环
2.1 类有一个主构造器 class Preson constructor(firstName : String)
主构造器在init{} 代码中进行初始化
和若干个第二构造器,这些构造器中除了主构造器参数都不允许为var和val也就意味着这些构造器参数是只读状态不能修改
2.2 创建一个单例
2.3 构造器的默认参数 class Customer(val customerName:String = "Bill") 在调用的时候传入参数直接填写 Customer.customerName
2.4 实现get set 方法 利用提供的filed属性
2.5 方法使用默认参数,process(var name:String = "DY",var age:int = 30)
调用的时候也可以指定参数 process(age= 25) 那么那么使用默认参数, 传递多个参数时候vararg 标记
2.6 方法分为全局方法和类成员函数 还有一种本地函数,生命周期在方法内,同样类也有类部类,外部访问时将类部类标记成inner就可以了,
3.1 修饰符除了常用的private等外 加了internal 解释任何Model内部内都可以访问 ,open 标在class 前面表示可以继承和被重写,默认class 通过final 标记
4.1 枚举和java相似 enum class Direction{NORTH,SOUTH}
4.2 扩展API, 例如ArrayList 我们要添加一个swap方法 写一个fun方法放到代码最上面
扩展函数如果方法名字和参数一样 优先级是class 内部成员函数优先
扩展原生API ,扩展自定义类,扩展已有的内部方法是无法覆盖的,扩展属性,扩展伴随对象
5.1 数据类 解析json 数据类标记为data class xx 数据类和普通类相似,可以拥有内部类,最大好处是通过构造器自动生成相关比对代码。 要注意的 主构造器必须有一个参数 ,参数必须标记val或var,不能是抽象类 open类、封闭类、或类部类
5.2 解构val {name,age} = User("张三",15)写法是这样的,封闭类sealed 是枚举的扩展类,最大的好处是when表达6.2 java 通配符? 在kotlin 中取代的是out 和 in, out常见在方法返回值使用 in常见当参数使用
关于第六章泛型写法暂时写到这里,还没太清楚
7.1 对象和委托
7.1.1 对象匿名类
7.1.2 声明匿名对象,只能用在本地函数(fun 函数里面的 fun 函数) 或者 private 声明的 才能使用
7.1.3 访问封闭作用域内的变量 在匿名对象中直接可以修改var 变量
7.1.4 陪伴对象 在kotlin 中并没有静态类成员变量概念,为了解决这个问题就有了它,companion object
7.2 委托 对象委托 : class Deriverd(b: Base) : Base by b 和属性委托 感觉用的应该不多
7.3 标准委托库
lazy 惰性装载 默认是同步的 属性只会在唯一线程内执行 如果不需要同步 多个线程多次初始化可以指定LazyThreadSafetyMode.PUBLICATION参数,如果确定它只会在一个线程中执行 那么可以使用LazyThreadSafetyMode.NONE 线程不会保持同步 不会有性能损失
7.4 可观察属性
Delegates.observable 监听状态被改变
Delegates.vetoable 阻止属性 判断
7.5 Map 委托 和 MutableMap委托
map 委托可读 不可写 Mutable 可读可写
8 高阶函数和Lambda 表达式
8.1 将方法作为参数传递
9.1 infix 中缀函数 vararg 可变函数 泛型函数 内联函数 inline
10 常见操作符重载
11 kotlin的空安全
?.let 过滤空值
nullableList.filterNotNull() 过滤集合中空值