Kotlin和Java的簡單對比

編程語言 Kotlin Java Python 程序員 僱個城管打天下y 2018-11-29

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中它需要調用一個操作符“ ?”來明確指定一個對象,或者一個屬性變量是否可以為空。

Kotlin和Java的簡單對比

# 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語句中的```case```和```default```使得代碼量少了很多,但是其實可讀性卻少了很多

# 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的對比,有點亂,暫時先到這裡,等著深入學習後繼續總結。

相關推薦

推薦中...