Kotlin相对于Java的区别

163 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情

Android开发中,是会用偏向于老牌的Java语言开发还是使用Google大力扶持的Kotlin进行开发,Kotlin相对于Java又做出了哪些改变?

1. 空安全

  • Java
    • Java若遇到变量为空,则会报NullPointerException空指针异常
    • 需要自己进行变量判空
  • Kotlin
    • 在默认情况下,Kotlin中的变量都不允许为空,不允许定义变量为空
    • 若要强制定义变量为空,应在定义变量时候在数据类型后加
      • var name : String? = null

2. 类的创建

  • Java
    • 创建一个简单的保存数据类时,我们需要定义变量、编写构造函数以及Get和Set方法等方法。
public class User {

    String name = "unknow";

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • Kotlin
    • 创建一个简单保存数据类时,我们只需要在类的定义中声明带有关键字data的类,编译器将自动为该类创建构造函数以及Get和Set方法等方法。
    • data class User(var name: String)

3. 异常检查

4. 类型推断

  • Java
    • 声明时需要明确定义每个变量的类型
    • String name = "unknow";
  • Kotlin
    • 不需要定义每个变量的类型,它会自己分配
    • 如果想强制定义数据类型,可以
      • var name : String = ""

5. 静态成员

  • Java
    • 静态成员表示的是该成员属于一个类,外部可以在不实例化这个类的情况访问这个成员
    • 静态成员使用static进行修饰
      • static String sex = "man";
  • Kotlin
    • 不允许创建静态成员
    • 但是你可以通过象处理此类问题,一样可以通过类名访问该对象
      • companion object { var age = 2 }

6. 类型转换

  • Java
    • 必须检查变量的类型并相应地强制转换对象
      • int numInt = (int) num;
  • Kotlin
    • 支持智能转换,还可以用过is-check关键字处理转换检查
      • var isDouble: Boolean = num is Double

7. 协程支持

  • Java
    • 在Java中成为轻量级线程,如果启动了长时间运行的网络或者CPU紧凑型操作,那么相关的线程会被阻塞
    • 提供了在后台创建和运行多个线程的功能,但是要管理这些线程是一个艰巨的任务
  • Kotlin
    • 允许创建多个线程来运行这些长时间运行的紧凑操作
    • 但是支持协程,那么线程将会在特定点终止执行并且不会阻塞其它线程