美文网首页
更新至2019-10-14 Kotlin入门过程全记录...

更新至2019-10-14 Kotlin入门过程全记录...

作者: kennychaos | 来源:发表于2019-08-09 16:31 被阅读0次

    目录

    看完相关知识要记得手撸一边代码
    已经开始正式开发了...之后会在这些点上更上自己理解

    • kotlin与java的区别

    • kotlin相关教程及资料

    • 问题点:

      1. 如何与java混用
      2. 内存回收上是否还是过jvm的gc
      3. 相对java优化了什么
      4. 表达式与语句
        1
        2
      5. 高阶函数和lambda表达式
      6. 标签
      7. 库函数
      8. 类的构造函数和构造器
      9. 伴生对象
      10. 扩展函数
        Kotlin允许开发者在不改变已有类的情况下,为某个类添加新的函数。这个特性叫做扩展函数。
      /* 举一个简单的例子。如果要关闭一个I/O流,使用Java可能是写一个工具方法 */
      /**
       * 安全关闭io流
       * @param closeable
       */
      public static void closeQuietly(Closeable closeable) {
          if (closeable != null) {
              try {
                  closeable.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
      

      复制代码对Kotlin而言,可以对Closeable扩展一个函数closeQuietly()

      fun Closeable?.closeQuietly() {
          try {
              this?.close()
          } catch (e: Throwable) {
          }
      }
      

      复制代码之后,任何实现了Closeable接口的类,都可以使用它本身的closeQuietly()方法来关闭流。我们不再需要那个工具方法了

      其实扩展并不是反射,只是利用kotlin的lambda表达式特性而已

      1. 幕后字段
      2. 委托属性
      3. in & out
      4. lateint & by lazy
        也就是当实际调用到时才会去执行被此修饰符修饰过的属性的初始化
      5. inner companion constructor init 的顺序
      6. 委托和委托属性
      7. 中缀表示法
      8. 内联函数
      9. 神奇的_

    kotlin与java的区别

    1. 在做kotlin时,思路应该进行转换,不再像java一样参数即对象,而是参数可以是一个规定好返回和入参的函数声明
    2. val <==> final
    3. 定义变量 var ,无初始值时需要赋予数据类型
    4. 定义函数 funUnit返回类型的返回的是无意义的值,可以直接忽略 , 在返回类型后面加上 ? 则表示可能返回null
    5. 打印变量 $ ,打印集合中的某个变量 ${list[index]}
    6. is <==> instance of
    7. for in <==> 增强for
    8. indexfor inwhile 的关键字,意为序号, list.indicesfor in 的索引集
    9. in 为区间检测
    ````
    /* 使用范例 */
    val list = listOf("a", "b", "c")
    if (-1 !in 0..list.lastIndex) {
        println("-1 is out of range")
    }
    if (list.size !in list.indices) {
        println("list size is out of valid list indices range, too")
    }
    for (index in list.indices){
        println(" value is ${list[index]} ")
    }
    ````
    
    1. 不再使用 new 创建类
    2. when <==> switch , 除非能保证所有case都包含了,否则else是必备的
    3. kotlin存在一个装箱的概念,所以存在一个 === 的判断,需要注意同一性相等性
      ps: 这点与js相似,泛类型语言
    4. 基础类型中 较小的类型不能隐式转换为较大的类型,所以进行转换的时候就需要用到
    ````
    toByte(): Byte
    toShort(): Short
    toInt(): Int
    toLong(): Long
    toFloat(): Float
    toDouble(): Double
    toChar(): Char
    ````
    
    1. 运算操作符
    ````
    (只用于 Int 与 Long)
    shl(bits) – 有符号左移 (Java 的 <<)
    shr(bits) – 有符号右移 (Java 的 >>)
    ushr(bits) – 无符号右移 (Java 的 >>>)
    and(bits) – 位与z
    or(bits) – 位或
    xor(bits) – 位异或
    inv() – 位非
    ```` 
    
    1. 数组 Array,库函数 arrayOf() 创建数组,库函数 arrayOfNulls() 创建一个指定大小,所有元素都为空的数组,另一种创建方式:
    ````
    fun main() {
        // 创建一个 Array<String> 初始化为 ["0", "1", "4", "9", "16"]
        val asc = Array(5) { 
            j -> (j * j).toString() 
        }
        asc.forEach { println(it) }
    }
    ````
    
    1. @JvmOverloads
    2. const <==> final
    3. open 在kotlin允许被继承时就需要用此修饰符修饰类
    4. data修饰符专门用于修饰数据model类,可以继承sealed使用data修饰的model类,在实现Parcelable做序列化的时候非常方便
    5. sealed修饰符专门用于修饰密封类,也就是类继承受限
    6. 泛型
    7. 对象表达式 <==> 匿名内部类
    8. 对象表达式 对象声明
      对象表达式是在使用他们的地方立即执行(及初始化)的 对象声明是在第一次被访问到时延迟初始化的
    9. 伴生对象的初始化是在相应的类被加载(解析)时,与 Java 静态初始化器的语义相匹配
    10. 标准函数

    kotlin相关教程及资料

    相关文章

      网友评论

          本文标题:更新至2019-10-14 Kotlin入门过程全记录...

          本文链接:https://www.haomeiwen.com/subject/nvhcjctx.html