开启掘金成长之旅!这是我参与「掘金日新计划 · 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
- 允许创建多个线程来运行这些长时间运行的紧凑操作
- 但是支持协程,那么线程将会在特定点终止执行并且不会阻塞其它线程