美文网首页我爱编程
Kotlin和Java的简单对比

Kotlin和Java的简单对比

作者: 雇个城管打天下 | 来源:发表于2018-06-21 11:01 被阅读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的对比,有点乱,暂时先到这里,等着深入学习后继续总结。

    相关文章

      网友评论

        本文标题:Kotlin和Java的简单对比

        本文链接:https://www.haomeiwen.com/subject/zrrqyftx.html