函數(表達式函數體)
java 寫法:
public Int methodName(int a){//TODO}
kotlin 寫法:
fun methodName(a:Int):Int{if(a>b)return a else return b }
特性: 可以使用表達函數體同時省略返回類型(當函數體只有一個表達式組成的時候)--as 可以自己轉換
fun methodName(a:Int)=if (a>b) a else b
變量
java 寫法:
int a =0; 使用確定類型
kotlin 寫法:
val 只能賦值不能改變值 --不可變引用 對應java finial
var 可以賦值也可以改變值 --可變引用
var a=0; 可以使用不明確類型 能夠根據值 確定類型 賦值之後 類型就確定了 再改變類型 a="a" 報錯
字符串模板
java 寫法:
Log.d(TAG,"a="+a);
kotlin 寫法:
${} 括號裏面不僅可以放變量 表達式 還可以放雙引號引用文字
Log.d(TAG,"a=${if(a>0) a else "anything"}")
類和屬性
java 寫法:
public class Person{ String name; int age;}
kotlin 寫法:
kotlin 中省略publish 因爲 默認就是public
class Person { val name:String var age:Int}
只讀字段name 會對應生成一個get方法
可變字段age 會生成set和get 一對方法
簡化引用
val person=Person(“”小a“”,12)
person.name 省略調用get方法的必要 直接調用變量
自定義訪問器
class Retangle{
val isSquare:Boolean
get(){ return width==heigh }}
目錄和包
java 寫法:
java結構中 每個文件 的包名是固定的 每個文件夾下的所有類 包名都是相同的 (同一個包下)
kotlin 寫法:
包名可以自己定義 不同包名的文件 可以放在同一個包下 (爲了結構清晰 本人不太推薦使用這種分包方式)
枚舉 和 when
java 寫法:
枚舉 enum Color{RED,YELLOW,GREEN,GRY}
選擇器 switch(i){case ...}
kotlin 寫法:
改變了枚舉類型寫法 對於enum這個關鍵字 kotlin 規定 不寫在class前面 沒有意義 只是普通名稱
和java類相同 enum 並不是值得列表 同時可以添加屬性和方法
enum class Color(val r: Int;val g:Int;val b:Int){
RED(255,0,0),YELLOW(255,255,0);
fun rgb()={(r*256+g)*256+b}
}
大概瞭解的人 都知道 kotlin 已經省略了; 但在枚舉中 屬性和方法之間必須有;
kotlin 中使用when 代替switch選擇器
when(color){
Color.RED->{ //TODO}
Color.YELLOW,
COLOR.GREEN ->{//TODO}//多種情況使用,分割
...
else//使用else 代替default
...
}
對於when 不僅能夠使用switch 所能使用的 同樣 可以使用表達式 以及空參
when(set(c1,c2)){
set(Color.RED,Color.YELLOW)->{//TODO }
}
使用這種表達式 效率可能會有點低 我們轉化下
when{
(c1==Color.RED&&c2==Color.YELLOW)->{//TODO}
}
這種無參寫法 可以省略創建對象 但是很難理解
for新特性(in 的用法)
java 寫法:
很簡單不在寫了
kotlin 寫法:
常見的 1-100輸出 使用了區間 1..100 是不是很簡單
for (i in 1..100){//TODO }
可以設置 倒敘
for (i in 100 dowmTo 1 step 2){// 設置倒敘 步長爲2 }
in不僅可以可以檢查數字類型的區間 還可以 檢查字符
for(a in 'A'..'Z')
when(char){
in 0..9->{}
in 'a'..'z'->{}
}
不僅有in 還有 !in 這個不再介紹
map新特性
java 寫法:
賦值 map.put(key,value)
迭代 很簡單不寫了==
kotlin 寫法:
map新特性
賦值 map[key]=value
迭代
for((key,value) in map){//TODO }
異常處理
java 寫法:
try{ return num;}cache(Exception e){}
throw new Exception("msg")
int persentNum=0;
if(num>0&&num<100){
persentNum=num;
}else{
throw new Exception("num must between 0 and 100")
}
kotlin 寫法:
與實例創建一樣 省略new
throw Exception("msg")
特性一:
上面我們提過表達式函數體這個概念 那麼 上面的 if else 就可以改寫成表達式函數體
val persentNum=try{num}catch(e:Exception){}
val persentNum= if(num in 0..100) num else throw Exception("num must between 0 and 100")
特性二:
取消了受檢異常和非受檢異常區分
在java中 我們使用讀寫 比如 BufferReader reader reader.readLine()方法的時候as直接出現提示 必須 處理 或者拋出異常
這是因爲 IOException在java中屬於受檢異常(在java.lang庫內部定義。Java編譯器要求程序必須捕獲或聲明拋出這種異常--checkException。)對於受檢異常 必須顯示拋出 。
kotlin像許多語言 一樣取消了受檢異常 和非受檢異常的區分 也就是 我們只在必要的時候 處理異常 不會再有強制性必須處理的異常了