02.kotlin笔记2

本篇是kotlin学习的第二篇,继续上篇的学习笔记

  1. ::

     表示引用了一个方法。
     如果是引用了本类中的方法, :: 可以直接调用,也可以 this::
     如果是应用了其他类中的方法,比如 Test 类。
     静态方法写法是  Test::方法名。
     普通方法写法是  test::方法名。
    
  2. by lasy 和 lateinit

     lateinit 延迟初始化,通常用来避免非空检查,且在低版本的kt中,仅支持属性使用 lateinit。 
     不支持局部变量使用。
     只能用来修饰var 类型的变量
    
    
     by lazy {}惰性初始化,当用到属性的时候,才会进行初始化。 
     目的:初始化消耗大量资源的属性,且不是立即用到的属性,进行推迟初始化。
     {}中的方法体只执行一次,次二次获取时,直接获取{}返回的数值。
     只能用来修饰 val 类型的变量 
     属于 if - null -then -init -else -return 这种单例模式
     
     by lazy {}是委托的一种实现,具体解释在下面的参考资料中
    
  3. 集合部分:

     对集合的操作主要有以下几种:
     总数、过滤、映射、元素、生产、排序 操作。
    
  4. 委托

     主要分为两种:
     - 类的委托
             : Test by test {}
     - 属性委托
             : Test by test ()
             应用:懒加载, 可观察属性委托,可否定属性委托,非空属性委托,属性委托给map
             
     注意:
     by test 表示调用委托类当中的,所有共有方法委托给一个指定的对象test. 
     相当于一个公共方法共有的一个属性。
    
  5. if

     if 作为表达式,是有返回值的!!!
     她替代了三目运算符进行返回。返回值是最后一行代码的结果值。
     我们可以将其置于 return 之后,进行返回。
    
  6. return

     这里要注意以下,因为 return 的使用和java中有不一样的地方。
    
     普通方法中,基本是一致的。但是在Lambda 表达式中的返回,是直接犯规最近的外层方法。
     并不是将最近的外层方法以外的方法也一并返回。 
     具体参看事例:https://www.jianshu.com/p/bb524d6f4007
    
  7. 重载操作符

     Java中并没有操作符重载这样的概念,但是Kotlin是可以实现的。 
     
     一元操作符
     +a, -a, !a
     a++, a--
     
     二元操作符
         算数操作符
             a+b 等
         in 操作符
             a in b  --> a.contains(b)
         索引访问操作符
             a[i] --> a.get(i)
         广义赋值
             a+=b -> a.plusAssign(b)
             注意 : += 和 + 不能同时重载,可变的用 +=  不可变的用 +
         相等不等
             a == b , a!=b
     
     
     这些操作符都可以翻译成对应的方法。只要我们在对应的类里面定义了对应方法即可。
     eg: a++ -->  a.inc()
     
     中缀表示法
     
     注意一下优先级的问题。
    
  8. java and kotlin 互调

     这里要注意空安全的问题。在kotlin 调用 java bean类的时候。
           如果不注意,同样会抛出异常,引发崩溃。
     
     eg: A 中有一个属性b,B中一个属性c。 我们在调用的时候,
         应该进行空安全的判断: a.b?.c 
         而不是直接使用 : a.b.c 
         
     java 调用 kotlin 时,kotlin 抛出的异常也不强制java显式地 try catch。
            如果希望try catch 住的话,需要在抛出异常的位置声明注解: 
     
     Throws(Excepiton::class)
    
  9. kotlin Unchecked Exception

    在 kt中,所有的异常都是 UE。 即编译器不会强迫我们捕获异常。
    
    所有的异常我们都要自己手动去添加。 自己去 try catch
    
    对于这点,现在还不是很理解kt为什么这么设计。�
    
  10. ::Class

       //不需要再使用这里 ::class 了。这里在新版本里面已经支持了。
               val javaClass = KotlinTest.javaClass
    
    �
    

参考资料

  1. https://www.jianshu.com/p/76bd97249f86
  2. https://www.jianshu.com/p/40487ae860f2?utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_source=recommendation
  3. https://www.jianshu.com/p/ef826e1391e9

你可能感兴趣的:(02.kotlin笔记2)