我爱编程

Kotlin和Java的简单对比

2018-06-21  本文已影响26人  雇个城管打天下

1. 再也不用写分号了

是的,你没听错,只要你用了kotlin就再也不用担心忘记写分号了,这点真的不要太爽啊。

2. 输出语句再也不用写System.out.println()这么一大长串了

kotlin里面的输出语句非常简单,输出是print(),输出一行是println(),其实从以上两个特点来看风格有点像python,但是python代码的作用域是和缩进有关系,这点就很蛋疼了,万一那天写代码的时候眼神不好缩进少了或多了一格不就gg了吗,然而kotlin保留了大括号,这点就让我更加喜欢了

3. kotlin中创建一个对象不需要写“new”关键字

熟悉java的人肯定都知道一个段子,程序员如果没有女朋友那就去new一个出来,但是如果kotlin程序员没有女朋友的话他连new一个对象出来的机会都没有,来看看kotlin里面是怎么创建一个对象的

var person=Person()

没有new关键字,也没有分号,对象名前面也不像java里面要先写类的名字,这里直接用var或者val来申明了

4. getter/setter

相信经常写java的同学一定会对这两个方法很熟悉,getter和setter虽然说IDEA会帮我们生成,但是每次都要自己去生成真的很烦啊,然而在Kotlin中,getter和setter是可选的,如果你没有在代码中创建它们,它是会默认自动生成。
比如说:

class Account {
    var name: String = "" 
    var age: Int = 0
    var balance: Double = 0.0
}

和下面的代码是等价的

class Account {
    var name: String = "" 
    var age: Int = 0
    var balance: Double = 0.0
    // 这种set和get方法不推荐在代码中自己手动去写
    set(vaule){
        field = value 
    }
    get() = field
}

这里的getter/setter的写法又有点类似c#,所以说kotlin是一个柔和了很多语言优点的语言,集众家之所长形成的。
当然有几点很重要:

  1. 用val申明的对象不允许设置setter函数,因为该函数是只读的。
  2. 类的定义在声明属性时,Kotlin采用默认访问修饰符public,所以在kotlin中如果也用了private修饰符,那同样得定义一系列的set()/get(),不然在类外面无法通过对象获取属性。 例如:
class Account {

    private var name: String = ""
    private var age: Int = 0
    private var balance: Double = 0.0

    fun setName(name: String) {
        this.name = name
    }

    fun getName(): String {
        return this.name
    }

    fun setAge(age: Int) {
        this.age = age
    }

    fun getAge(): Int {
        return this.age
    }

    fun setBalance(balance: Double) {
         this.balance = balance
    }

    fun getBalance(): Double {
         return this.balance
    }
 }

5.类的声明

java类的成员变量,构造方法,成员方法声明方式

public class JavaBean {
    private String name;

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

    public void hello(){
        System.out.println("name="+name);
    }
}

kotlin类的成员变量,构造方法,成员方法声明方式

class KotlinBean(val name:String){
    fun hello(){
        println("name"+name)
    }
}

6. 空安全

为什么要说空安全,在Java代码中,我们经常要做判空处理,就是所谓的if(xx!=null){//doSomething()},但是在kotlin中它需要调用一个操作符“ ?”来明确指定一个对象,或者一个属性变量是否可以为空。

7. Kotlin的when语句和Java的switch语句

kt中的when语句和Java中的switch语句的作用是相同的,但是写法上却不尽相同,先看示例:
Kotlin 的 when 循环判断语句

fun test(value: Int){
    when(value){
         10 -> println("数字10");
         20 -> println("数字20");
         30 -> println("数字30");
        else ->{
            println("未知数");
        }
    }
}

Java的switch语句

private void test(int value) {
        switch (value) {
            case 10:
                println("数字10");
                break;
            case 20:
                println("数字20");
                break;
            case 30:
                println("数字30");
                break;
            default:
                println("未知数");
       }
}

可以很明显的看出来kotlin里的when语句有lambda的风格,虽然用了->else代替了switch语句中的casedefault使得代码量少了很多,但是其实可读性却少了很多

8. 继承,接口等的关键字

  1. 对于继承,用:代替extends关键字
    Java:MainActivity extends Activity,
    Kotlin:MaiActivity :Activity()
  2. 对于接口,用:代替implements    
    Java:
public class MammalInt implements Animal{
   public void eat(){
      System.out.println("Mammal eats");
   }
}

kotlin:

class Child : MyInterface {
    override fun bar() {
        // 方法体
        println("bar")
    }
}

9. for循环的变化

作为初学者,最常用的莫过于for循环了(虽然偶尔也会用用while循环,do...while的话,额,那是啥?)而在kotlin中,for循环的变化也是非常大的。举个栗子:
在java中是这样写的for(int i = ; i < 100; i++)
Kotlin是这样写的for (i in 0..99)
kotlin中的那个写法叫做区间,和python中的range()函数类似,但是用起来会更方便。

这里做个插曲来介绍下Kotlin中的区间,注意until/step/downTo关键字的使用
// 左闭右开区间,合法值包括11,但不包括66
for (i in 11 until 66) { ... }
// 每次默认递增1,这里改为每次递增4
for (i in 23..89 step 4) { ... }
// for循环默认递增,这里使用downTo表示递减
sfor (i in 50 downTo 7) { ... }

增强For循环

java中: for(集合 变量:集合名)
kotlin中:for(变量名 in 变量集合)

while语句和do..while语句在kotlin中和java基本无异

最后

先简单的总结下自己在学kotlin的过程中和Java的对比,有点乱,暂时先到这里,等着深入学习后继续总结。

上一篇下一篇

猜你喜欢

热点阅读