從java到Kotlin學習一:初瞭解kotlin

函數(表達式函數體)

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像許多語言 一樣取消了受檢異常 和非受檢異常的區分 也就是 我們只在必要的時候 處理異常 不會再有強制性必須處理的異常了





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章