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是一個柔和了很多語言優點的語言,集眾家之所長形成的。
當然有幾點很重要:
- 用val申明的物件不允許設定setter函式,因為該函式是隻讀的。
- 類的定義在宣告屬性時,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語句中的case
和default
使得程式碼量少了很多,但是其實可讀性卻少了很多
8. 繼承,介面等的關鍵字
- 對於繼承,用
:
代替extends
關鍵字
Java:MainActivity extends Activity
,
Kotlin:MaiActivity :Activity()
- 對於介面,用
:
代替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,但不包括66for (i in 11 until 66) { ... }
// 每次預設遞增1,這裡改為每次遞增4for (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 對比KotlinJava
- EasyReact的簡單試用及和RAC的對比React
- ListView 與 RecyclerView 簡單對比View
- XTask與Kotlin Coroutine的使用對比Kotlin
- mongodb和hbase的簡單比較MongoDB
- Python實現簡單的excel對比工具PythonExcel
- 日誌收集工具簡單對比
- vue 之 axios 和 vue-resource簡單get請求對比VueiOS
- Java Python 和Nodejs在web開發方面的簡單比較JavaPythonNodeJSWeb
- Java常用的日誌框架對比和分析Java框架
- Kotlin & Java 之單利模式KotlinJava模式
- OPUS裡的Silk和原始Silk簡單比較
- Kotlin超簡單實現StepViewKotlinView
- java介面和抽象類的簡單理解Java抽象
- C++中單例模式和static的對比C++單例模式
- Go 和 Java 的效能對比,真的如此嗎?GoJava
- 關於Java和C#的型別對比JavaC#型別
- Java深度拷貝方式和效能對比Java
- Java HashMap和Go map原始碼對比JavaHashMapGo原始碼
- 簡單對比測試了幾個基於 swoole 的框架框架
- 使用 Flex 佈局與其他普通佈局的簡單對比Flex
- [譯] 一個簡單方式教你記住Kotlin的形參和實參Kotlin
- Kotlin:代理真的很簡單啊!Kotlin
- C# 單例模式的實現和效能對比C#單例模式
- Kotlin對決Java:Android開發的選擇?KotlinJavaAndroid
- Java與Kotlin的單例模式(霸氣.jpg)JavaKotlin單例模式
- 簡單介紹SpringSecurity框架簡介及與shiro特點對比SpringGse框架
- Java:對一個物件序列化和反序列化的簡單實現Java物件
- Java對比有引數和無引數Java
- 簡單瞭解下Java中鎖的概念和原理Java
- Python 和 c++/c/java 對於負數的儲存方式對比PythonC++Java
- 對CSRF的簡單理解
- TCP對應的協議和UDP對應的協議(簡單概述)TCP協議UDP
- 簡單的效能測試說明為什麼Go比Java快?GoJava
- Git和SVN的對比Git
- Python 和 Ruby 的對比Python
- Java社群對Kotlin有什麼看法? - redditJavaKotlin
- java排序方式對比Java排序