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
- 簡單對比git pull和git pull --rebase的使用Git
- HTTPS SPDY和 HTTP/2效能的簡單對比HTTP
- ListView 與 RecyclerView 簡單對比View
- java 和 Ruby On Rails的對比JavaAI
- Kotlin 對比 轉化Kotlin
- mongodb和hbase的簡單比較MongoDB
- 日誌收集工具簡單對比
- 簡單對比MySQL和Oracle中的一個sql解析細節MySqlOracle
- Oracle 和 mysql 的一些簡單命令對比參照(轉)OracleMySql
- XTask與Kotlin Coroutine的使用對比Kotlin
- Python實現簡單的excel對比工具PythonExcel
- React 中的新舊 Context 簡單對比ReactContext
- Oracle/MySQL/PostgreSQL 簡單查詢的效能對比OracleMySql
- Delphi寫的讀狗程式的簡單逆向對比.
- java Comparable和Comaprator的對比Java
- 對比C++和Java (轉)C++Java
- SOAP和RESTful框架的簡介、對比和區別REST框架
- RxJava2與RxJava1的簡單對比RxJava
- vue 之 axios 和 vue-resource簡單get請求對比VueiOS
- nginx與lighttpd效能簡單對比薦Nginxhttpd
- Java常用的日誌框架對比和分析Java框架
- Java和Python的程式設計對比JavaPython程式設計
- Java和.NET的GZIP壓縮功能對比Java
- java介面和抽象類的簡單理解Java抽象
- 對TM鎖和TX鎖的簡單理解
- Go 和 Java 的效能對比,真的如此嗎?GoJava
- 關於Java和C#的型別對比JavaC#型別
- perl DBI DBD和java 的JDBC對比學習JavaJDBC
- Kotlin & Java 之單利模式KotlinJava模式
- 關係型資料庫和非關係型資料庫的簡單對比資料庫
- .NET輕量級MVC框架:Nancy入門教程(二)——Nancy和MVC的簡單對比MVC框架NaN
- 簡單計算器的程式導向實現和麵向物件實現對比物件
- Kotlin超簡單實現StepViewKotlinView
- Java Python 和Nodejs在web開發方面的簡單比較JavaPythonNodeJSWeb
- Java HashMap和Go map原始碼對比JavaHashMapGo原始碼
- Java深度拷貝方式和效能對比Java