• Kotlin来了


    kotlin优点(主要是代码简洁度)

    1.避免空指针异常,其次在一个文件中java方法必须写在class里面,而kotlin则没要求

    2.在同一个文件中,有class a则不允许在class外的方法(与class同一级别,也就是没写在class里的方法)同名  

    3.可以没有;作为语句结尾

     http://www.jianshu.com/p/1a23856bc749

    基础语法

    相等

    • 引用相等

        a === b    // a.identityEqual(b)
    • 结构相等

        a == b        // a?.equals(b) ?: b === null
    • For

      • in等价于foreach

          for ((k, v) in map) {
              println("$k -> $v")
          }
      • indices下标索引

          fun main(args : Array<String>) {
              for(i in args.indices) {
                  print(args[i])
              }
          }
      • sizei()

          fun main(args : Array<String>) {
              var i = 0
              while(i < args.size()) {
                  print(args[i++])
              }
          }

    var代表变量;val代表常量

    参数后面带有?代表可为空

    创建对象直接 val user = User()就好

    重写方法在fun前面override关键字java则是在上面有一个注解的@override

    声明一个为空的对象作为变量

    private var mTextMessage: TextView? = null
    把一个对象转为子对象使用关键字 as
    mTextMessage = findViewById(R.id.message) as TextView



    万能的:

    方法返回一个值,在方法的()后面加:以及返回的类型

    例如返回布尔类型的

    fun  a():Boolean{
    return false
    }
    在类后面:xxx()这是继承或者实现一个另一个类
    例如:class MainActivity : AppCompatActivity() {}

    可以被继承的类需要在类前面使用open关键字,
    被overite 的方法也需要在方法前使用open


    OOP

    1. 默认都是final
    2. package import和java一致,如果出现导入报名冲突可以使用as

       import foo.Bar
       import bar.Bar as bBar

    构造函数

    1. 主构造函数只有一个,是类头的一部分跟在类名后面

      • 主构造函数的参数

          class Person (firstName: String) {
              init {} // 主构造函数初始化代码
          }
        
          // 等价于
          public final class Person {
              public Person(String name) {
                  // init{}
              }
          }
      • 主构造函数 + 属性

          class Person(val name: String, var age: Int) {}
        
          // 等价于
          public final class Person {
              private final String name;
              private int age;
        
              public Person(@NotNull String name, int age) {}
        
              // getter setter
          }
      • 如果一个类没有声明任何构造函数,将会生成一个不带参数的主构造函数

    2. 二级构造函数,使用constructor

       class Person(val name: String) {
           constructor(name: String, parent: Person): this(name) {}
       }
    3. 创建实例:没有<del>new</del>关键字,直接调用构造函数

       val person = Pserson("ss");

    属性

    要使用属性只需要使用名称引用即可,就相当于java中的public字段

    继承:

    所有类的共同父类Any,不属于java.lang.Object,没有任何成员变量,甚至没有equals()hashCode()toString()





    普通类

    1. 继承的类有主构造函数

       open class Base(p: Int) {}
      
       class Derived(p: Int) : Base(p) {}
    2. 没有主构造函数,那么每个二级构造函数使用super或者委托给另一个构造函数

       class MyView : View {
      
           constructor(context: Context) : super(context) {
           }
      
           constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
           }
       }
    3. 父类的函数必标注open(去掉java中的final关键字)否则子类不允许定义同名函数;因此父类类头上也要标注open
    4. 函数必须加上override标注才能重写父类方法

    抽象类 & 接口

    单例

    好像object 声明修饰的就是一个简单的单例模式
    object SDKFactory {
        fun say(name : String) {
            println("hello ${name}")
        }
    }
    SDKFactory.say("CatDog")    // SDKFactory.INSTANCE.say("CatDog")
    public final class SDKFactory {
        public static final SDKFactory INSTANCE;
    
        private SDKFactory() {
            INSTANCE = (SDKFactory)this;
        }
    
        static {
            new SDKFactory();
        }
    
        public final void say(@NotNull String name) {
            // ..
        }
    }
  • 相关阅读:
    学习使用linux下tags文件
    uboot常用命令详解
    U-boot中TFTP 解释
    eth0: ERROR while getting interface flags: No such device 没有eth0 有其他的eth
    取消挂载 umount 时出现的 “Device is busy”
    Linux的log日志功能
    oracle的安装
    SOA架构设计分析
    立方体模型
    质量属性的六个常见属性场景(淘宝网)
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/6899211.html
Copyright © 2020-2023  润新知