用Java開發了不少年,由於工做的須要學習Kotlin。初識Kotlin時是各類不習慣,以爲這個語言相對於Java而言並不夠嚴謹。隨着不斷的深刻,最終仍是逃不過"真香定理"。我一直認爲普通的技術使用者是沒有太多的權利去評論一門技術語言的好壞。不少人只瞭解皮毛就開始對它進行過度的評論。因此你們不要被網上的一些信息所左右(像我這樣單純的程序員好像很少了)。若是你有Java基礎,上手Kotlin是很是的快,並且還會讓你愛不釋手。前端
國際慣例,咱們分別用Java和Kotlin實現打印hello world的功能。經過比較二者的區別,開啓Kotlin大門。java
先是熟悉的Java代碼:程序員
第一步:建立java文件,並定義一個HelloWorld類,編程
第二步:建立類的入口函數main方法,在main函數中執行輸出語句。後端
package com.java.helloworld; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
接一下是陌生的Kotlin代碼:安全
第一步:建立kt文件,編程語言
第二步:建立入口函數main方法,在main函數中執行輸出語句。函數
package com.kotlin.helloworld fun main(args: Array<String>) { println("Hello World") }
看到這部分代碼,你必定會奇怪學習
Kotlin不須要定義class類就能夠執行main方法?是的,固然也能夠作到先定義類,而後在類中建立main函數。code
Kotlin是經過fun關鍵字定義一個函數?
Kotlin的main函數爲何沒有public static void 等關鍵字?
Kotlin的變量名怎麼在變量類型的前面?
Kotlin的輸出語句看起來好簡單!!!沒錯,這些都是Kotlin的語法特色。先混個臉熟!
Kotlin 是一種在 Java 虛擬機上運行的靜態類型編程語言。而且Google 已經宣佈 Kotlin 成爲 Android 官方開發語言。但這並不意味着Kotlin只能作Android開發。Java能作到的,Kotlin基本均可以作到。並且比Java更簡單,更簡潔,更實用。Kotlin還提供了大量的函數幫助咱們快速開發,同時也挖了不少坑等着咱們跳。
用Kotlin之後發現本身變笨了點!你們有沒有這樣的感受呢?
在Java中,聲明一個變量,必需要先規定變量的類型,而後纔是變量的名稱。與之相反,Kotlin是先定義變量名稱,最後纔是變量類型。Kotlin甚至能夠省略變量類型,經過編譯器智能推斷出變量的類型。這也是變量類型寫在後面的好處。
仍是老規矩,咱們分別用Java和Kotlin變量定義。經過比較二者的區別,進一步瞭解Kotlin。
列舉了一些Java常見的基本數據類型和用法,定義變量的格式:[修飾符] + 變量類型 + 變量名稱
public class Variable { public static void main(String[] args) { byte b = 0; short s = 0; int i = 0; long l = 0L; float f = 0.0f; double d = 0.0; boolean bl = true; char c = 'c'; } }
習慣用Java的朋友在使用Kotlin中最大的不適應的地方就是變量。由於聲明變量的代碼是常有的,並且二者的語法格式偏偏相反。Kotlin經過關鍵字val和var定義變量,而後接變量名和變量類型。格式:val/var + 變量名 : 變量類型。
使用關鍵字val修飾變量表示該變量是不可變的,至關於用Java的final修飾。一旦初始化成功後則不能再從新賦值。Kotlin是默認推薦使用val。開發中常常用val引用變量,對象、集合等。
使用關鍵字var修飾變量表示該變量時可變的,經常使用於修飾基本變量,若在實體類中使用val修飾變量,前端傳遞數據,後端可能會一直獲取不到值。就像GO語言,習慣使用Java和Kotlin語言的朋友,在初寫Go語言代碼時,是否被它的首字母大小寫邏輯給雷到呢?
注意:val的不可變指的是自己,它指向的對象多是可變的。這裏有一個小知識,Kotlin中的集合分只讀和可讀可寫兩種,是否是又不習慣了!
val map: MutableMap<String, String> = mutableMapOf("Key" to "ITDragon") map["Key"] = "ITDragonBlog" println(map) // {Key=ITDragonBlog} var i = 2 i ++ println(i) // 3
小技巧:初寫Kotlin代碼,var和val傻傻分不清楚。記住使用val可能出現值不修改的問題,可是都用var修飾變量,通常只會出現逼死強迫症的編譯警告。
Kotlin的變量並不是基礎數據類型,而是相似Java的包裝數據類型。不一樣的是:Java的包裝數據類型的默認值是null。但這裏的Kotlin變量都是不容許爲null的。由於Kotlin是null 安全的語言。若但願變量值能夠爲null,則須要在變量類型後面加上?。如Int?,Long?,Float?等等
fun main(args: Array<String>) { var b: Byte = 0 var s: Short = 0 var i: Int = 0 var l: Long = 0L var f: Float = 0.0f var d: Double = 0.0 var bl: Boolean = true var c: Char = 'c' }
相信你們都是有必定Java基礎的朋友,這裏只用輸出語句打印變量的取值範圍。${}
是Kotlin字符串拼接的語法,相比Java,更美觀。
fun rangeValue() { println("Byte (${Byte.MIN_VALUE} ~ ${Byte.MAX_VALUE})") println("Short (${Short.MIN_VALUE} ~ ${Short.MAX_VALUE})") println("Int (${Int.MIN_VALUE} ~ ${Int.MAX_VALUE})") println("Long (${Long.MIN_VALUE} ~ ${Long.MAX_VALUE})") println("Float (${Float.MIN_VALUE} ~ ${Float.MAX_VALUE})") println("Double (${Double.MIN_VALUE} ~ ${Double.MAX_VALUE})") }
Java支持將範圍小的變量隱示轉換範圍大的同類型變量,好比int類型轉long類型,char類型轉int類型等。可是Kotlin並不支持。好比Int類型變量和Char類型變量直接相加,編譯器會報錯。Kotlin必需要將Char變量經過執行.toInt()方法顯示轉換成Int類型。
Kotlin的變量還有一個特色,當聲明變量後直接賦值,編譯器會智能推斷該變量的類型,此時變量類型能夠省略。
開始以爲不習慣,後來慢慢就習慣了,這可能大概就是佛系程序員的一個特色吧
fun variableConvert(char: Char) { var number: Int = 1 println("顯示轉換成Int類型: ${number + char.toInt()}") var num = 2 println("智能推斷變量類型: ${num.javaClass}") }
到這裏,初始Kotlin的內容就介紹了。Kotlin與Java的區別太多太多了。Kotlin的特色也是很是多。我會拆分紅多個小章節。Kotlin好學,可是很差講。