常用kotlin語法記錄和使用說明 轉載請標明作者:晨諾星空junjiew

kotlin的語法和java有一定的差別,在使用的時候有一些語法還是容易不適應,所以記錄下來一些經常會用到的kotlin語法並帶有註釋和說明,方便更多人也方便自己在忘記時來查閱和使用~

1.關於創建對象

val a: Int = 100
println(a === a) // true,值相等,對象地址相等

//經過了裝箱,創建了兩個不同的對象
val boxedA: Int? = a
val anotherBoxedA: Int? = a

//雖然經過了裝箱,但是值是相等的,都是100
println(boxedA === anotherBoxedA) //  true,值相等,128 之前對象地址一樣
println(boxedA == anotherBoxedA) // true,值相等

這裏把 a 的值換成 100,這裏應該原理跟 Java 中是一樣的,在範圍是 [-128, 127]之間並不會創建新的對象,比較輸出的都是 true,從 128 開始,比較的結果才爲false。
如果這裏a的值超過了127,則兩個對象值是相等的,但是對象的地址是不同的。
關於創建對象的優化:我們都知道java裏面對new關鍵字的引用比較謹慎,爲了避免內存消耗,儘量少使用new爲優化原則,特別是儘量避免在循環中創建對象,這個應該在kotlin中也同樣適用!

2.關於!!與?修飾變量的區別描述:

var a:String? = null
a!!.print()  //a爲空時停止執行,做短路操作,項目運行中會出現空指針崩潰
a?.print()  //a爲空時繼續執行,但會拋出異常,但項目並不會報空指針而崩潰直接,是比較安全的一種用法

當我們直接調用一個可空變量的某方法或某成員變量時:
這裏寫圖片描述
Android Studio會提示在一個可空變量上,只有"安全調用"(safe call (?.))和"不爲空的斷言調用"(non-null assert call(!!.))是被允許的,
可以得知"!!"相當於是短路操作,即:

//kotlin中的
a!!.print()  
// 相當於java中的  
if(a==null){
 throw new NullPointerException()
}

而"?"相當於是安全類型的捕獲或者拋出異常操作,即:

//kotlin中的
a?.print()  
// 相當於java中的  
if(a!=null){
   a.print()
}

3.java中 extends kotlin用 (冐號):代替。
例如:java中:MainActivity extends Activity,
kotlin中:MaiActivity :Activity()
4.java中沒能返回值是void,返回值寫在小括號左面

現在改成空方法是Unit,方法用fun1, fun2,代替, 並且返回值要寫在小括號後面

fun Unit(x: Any, y: Any) {

funUnit(x: Any, y: Any): Int{

5.關於 switch case
java中 switch():

 switch(){
	case:
  breaak;
}

kotlin 中改變爲 when() ->

fun main(args: Array) {

val language = if (args.size == 0) "EN" else args[0]

println(when (language) {

"python" -> "python!"

"java" -> "java!"

"kotlin" -> "you are a luckey dog!!!"

else -> "Sorry, I can't understand you in $language yet"

})

}

6.關於kotlin中的apply方法:
apply函數是這樣的,調用某對象的apply函數,在函數範圍內,可以任意調用該對象的任意方法,並返回該對象
代碼示例

fun testApply() {
    // fun <T> T.apply(f: T.() -> Unit): T { f(); return this }
    ArrayList<String>().apply {
        add("testApply1")
        add("testApply2")
        add("testApply3")
        println("this = " + this)
    }.let { println(it) }
}

// 運行結果
// this = [testApply1, testApply2, testApply3]
// [testApply1, testApply2, testApply3]

7.關於for循環

//可以這樣寫
var isSubs = false
for (i in 0 until myList.size) {
	  val sku = ownedSkus[i]
	  Log.d(TAG,"sku =="+sku .toString())
	  if (sku=="sub_monthly"){
	     isSubs = true
	     //如果滿足條件,直接return結束循環
	     return isSubs
	   }
               
}

//也可以這樣的方式寫
for (i in 0..99) {
print(i.toString())
}

8.activity跳轉的時候,intent寫法:

//寫法一
var intent = Intent(this,YourActivity().javaClass)  
//寫法二
var intent = Intent(this,YourActivity::class.java)   
//最後放到 startActivity()方法裏面就行
startActivity(Intent(intent))

9.一個類中的變量想實現java中共的pulic static修飾效果,直接用類名可以調用

//在 var 修飾符前加 open就行
 open var zodiacZodiacDataMap: MutableMap<String, CompatibilityZodiacData>? = null

10.一個類中的方法與變量如果想實現java中的pulic static修飾效果,別的類可以直接用類名.調用出來可以這樣寫:

函數:
//在方法函數修飾符前加 open 並且放到 companion object {}中就行
 companion object {
        open fun shareMore(activity: Activity){
            val textIntent = Intent(Intent.ACTION_SEND)
            activity!!.startActivity(Intent.createChooser(textIntent, "Share"))
        }
    }
    
//調用時就可以直接用類名調用
 SharerUtil.shareMore(this)
 
變量:
//如果想要一個變量對外以靜態的形式開放,使其可以直接通過類名調用出來,可以這樣寫
class MainActivity : AppCompatActivity() {

   companion object {
        open var webview22: WebView? = null

    }
}
//調用的時候這樣調用:
MainActivity.Companion.getWebview22().loadUrl("http:baidu.com")

11.在kotlin中一些容器的創建方式:

	//int數組
    var inArray= intArrayOf(20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22)
    //字符串 數組
    var strArray = arrayOf("ss", "ss", "ss", "ss", "ss")
    //字符串  map
    var myDataMap: MutableMap<String, MyData>? = mutableMapOf<String,MyData>()
    //字符串list
    var strList = listOf( "ss", "ss", "ss", "ss", "ss")

	//創建一個不可變的list

	val mList = listOf<Int>(1, 2, 3)

	//創建一個可變的list

	val mList = mutableListOf<Int>(1, 2, 3)

	//這裏mutableListOf初始化了三個值,如果沒有這三個值就相當於一個空集合,比如

	 val mList = mutableListOf<Int>()

12.kotlin中生成指定範圍隨機數的方法:
  // 生成從0到2範圍內的隨機數(注意不包括2,實際生成的只有0和1)
   var radomnum = Random().nextInt(2)
   

最後聲明:以上是我個人一些經驗的總結與歸納,如果有寫的不對的地方,歡迎留言指正,謝謝!

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