Kotlin和Java的简单对比

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的对比,有点乱,暂时先到这里,等着深入学习后继续总结。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容