Kotlin 基礎(chǔ)學(xué)習(xí)

1. var 和 val

var理解成java中的變量,val理解成被 final 修飾的常量惜姐。
var id1 : String = "vicent"
id1 = "sfa"
val id2 : String = "112erf"
id2 = "dfs"http:// 會(huì) 報(bào)錯(cuò)
fun main() {
    // kotlin 的安全設(shè)計(jì)對(duì)于聲明可為空的參數(shù),在使用時(shí)要進(jìn)行空判斷處理
    // 有兩種處理方式:字段后加!!像java一樣拋出空異常椿息,另一種字段后加?
    var info: String?= null

//    println(info?.length)// 為空不執(zhí)行后面的代碼

//    println(info!!.length)// 自己負(fù)責(zé)info, == java

    println(test("b"))
    // 如果一定要輸出null 就輸出 "你狠牛逼"
    println(info?.length  ?: "你狠牛逼")
}

// : int? == 允許返回null
fun test(name : String) : Int? {
    if (name == "a") {
        return 100
    }
    return null
}

類型推導(dǎo)

var name2 = "vicent"http:// 類型推倒
var name3 = 18
var name4  = 'A'

2. 函數(shù)

// void == : Unit 可以不寫Unit
fun main() : Unit {
    println(add2(1, 4))
    lenMethod(1,2,3)
}

fun add(number1: Int, number2: Int) : Int {
    return number1 + number2
}

// 類型推導(dǎo)
fun add2(number1: Int, number2: Int) = number1 + number2

fun lenMethod(vararg  value : Int) {// 可變參數(shù)
    for (i in value) {
        println(i);
    }
}

3. 字符串模板

    var name = "張三"
    var name2 = 18
    var name3 = 'A'

    println("name:$name, name2:$name2, name3=$name3")

    // 換行
    val infoMsg = """
        AAAA
        BBBB
        ccccc
        ddddddd
    """.trimIndent()// 去掉這個(gè)之后會(huì)有前置空格

    println(infoMsg)

4. NULL檢查機(jī)制

    // kotlin 的安全設(shè)計(jì)對(duì)于聲明可為空的參數(shù)歹袁,在使用時(shí)要進(jìn)行空判斷處理
    // 有兩種處理方式:字段后加!!像java一樣拋出空異常,另一種字段后加?
    var info: String?= null

    println(info?.length)// 為空不執(zhí)行后面的代碼

    println(info!!.length)// 自己負(fù)責(zé)info, == java

5. in 區(qū)間

fun main() {

    for (i in 1..9) {
//        println(i)
    }

    // 不會(huì)輸出
    for (i in 9..1) {
//        println(i)
    }

    for (i in 9 downTo 1) {
//        println(i)
    }

    // 區(qū)間判斷
    val value = 9
    if (value in 1..100) {
//        println("包含了")
    }

    // 指定步長(zhǎng)
    for (i in 1..20 step 2) {
        println(i)
    }
    
    // 排除最后元素
    for (i in 1 until 10) {
        println(i)
    }
}

6. 比較兩個(gè)值

fun main() {
    var name1: String = "張三"
    var name2: String = "張三"

    println(name1.equals(name2))
    println(name1==name2) // 推薦使用

    // 比較對(duì)象地址 ===
    var age1:Int? = 10000
    var age2:Int? = 10000
    println(age1 === age2)// false
}

7. 數(shù)組

fun main() {
    val numbers = arrayOf(1,2,4,5)
    for (i in numbers) {
        println(i)
    }

    val number2 = Array(10, {value: Int -> (value + 100) })
    for (value in number2) {
        println(value)
    }

}

8. if 條件判斷

fun main() {
    val number1: Int = 99
    val number2: Int = 88

    val maxValue = if (number1 > number2) number1 else number2
    println(maxValue)

    val number = 5
    when (number) {
        1 -> println("11")
        2 -> println("22")
        3 -> println("33")
        4 -> println("44")
        5 -> println("55")
        else -> println("其他")
    }

    when (number) {
        in 1..100 -> println("11")
        in 101..200 -> println("22")
        else -> println("其他")
    }

    val result = when (number) {
        1 -> {
            println("很開心")
            "今天是星期一"
        }
        2 -> {
            println("很開心")
            "今天是星期二"
        }
        else -> "其他"
    }
    println(result)
}

9. 循環(huán)和標(biāo)簽

fun main() {
    abcd@for (i in 1..10) {
        for (j in 1..10) {
            println("i:$i, j:$j")
            if (i == 5) {
//                break
                break@abcd
            }
        }
    }

    var items = listOf<String>("aa", "bb", "cc")
    for (item in items) {
//        println(item)
    }

//    items.forEach { println(it) }
    // 下標(biāo)
    for (index in items.indices) {
    }

}

// 自帶的標(biāo)簽
class Dayang {
    val I = "aaa"

    fun show() {
        println(I)
        println(this.I)
        println(this@Dayang.I)
    }
}

10. 類

// 默認(rèn) public final class person 不能被集成寝优,在class前面加上open就可以被集成
class Person(id : Int) {// 主構(gòu)造

    // 次構(gòu)造 必須委托給主構(gòu)造
    constructor(id: Int, name : String) : this(id) {

    }

    // 次構(gòu)造
    constructor(id: Int, sex : Char) : this(id) {

    }
}

Java 單例模式和Kotlin單例模式對(duì)比

Java

public class NetManager {
    
    static class Holder {
        private static NetManager instance = new NetManager();
    }
    
    public static NetManager getInstance() {
        return Holder.instance;
    }
    
}

Kotlin

class NetManager {

    // 被objec 修飾的類 只實(shí)例一次 不需要()
    object Holder {
        val instance = NetManager()
    }

    // 派生操作 類被創(chuàng)建的時(shí)候一起被創(chuàng)建 看不到 static
    companion object {
        // 全部都是 相當(dāng)于 Java static
        fun getInstance() : NetManager = Holder.instance;
    }

}

懶漢式單例Java

public class NetManager2 {

    private static NetManager2 instance = null;

    public static NetManager2 getInstance() {
        if (instance == null) {
            instance = new NetManager2();
        }
        return instance;
    }

}

kotlin

class NetManager {
    companion object {
        private var instance : NetManager?= null
        fun getInstance() : NetManager {
            if (instance == null) {
                instance = NetManager();
            }
            return instance!!;
        }
    }
}

內(nèi)部類和嵌套類

class Test {
    val I = "aaaa"

    //  這個(gè)不是內(nèi)部類是嵌套類
    class Sub {
        fun show() {
            println(I);// 會(huì)報(bào)錯(cuò)
        }
    }

    // inner修飾內(nèi)部類
    inner class Sub2 {
        fun show() {
            println(I);// 會(huì)報(bào)錯(cuò)
        }
    }
}

實(shí)例類条舔,so easy, 相當(dāng)于java bean,會(huì)默認(rèn)幫我們創(chuàng)建get set方法乏矾,以及toString equals copy 等方法

data class User(val id: Int, val name : String)
public final class User {
   private final int id;
   @NotNull
   private final String name;

   public final int getId() {
      return this.id;
   }

   @NotNull
   public final String getName() {
      return this.name;
   }

   public User(int id, @NotNull String name) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      super();
      this.id = id;
      this.name = name;
   }

   public final int component1() {
      return this.id;
   }

   @NotNull
   public final String component2() {
      return this.name;
   }

   @NotNull
   public final User copy(int id, @NotNull String name) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      return new User(id, name);
   }

   // $FF: synthetic method
   public static User copy$default(User var0, int var1, String var2, int var3, Object var4) {
      if ((var3 & 1) != 0) {
         var1 = var0.id;
      }

      if ((var3 & 2) != 0) {
         var2 = var0.name;
      }

      return var0.copy(var1, var2);
   }

   @NotNull
   public String toString() {
      return "User(id=" + this.id + ", name=" + this.name + ")";
   }

   public int hashCode() {
      int var10000 = this.id * 31;
      String var10001 = this.name;
      return var10000 + (var10001 != null ? var10001.hashCode() : 0);
   }

   public boolean equals(@Nullable Object var1) {
      if (this != var1) {
         if (var1 instanceof User) {
            User var2 = (User)var1;
            if (this.id == var2.id && Intrinsics.areEqual(this.name, var2.name)) {
               return true;
            }
         }

         return false;
      } else {
         return true;
      }
   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孟抗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钻心,更是在濱河造成了極大的恐慌凄硼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捷沸,死亡現(xiàn)場(chǎng)離奇詭異摊沉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痒给,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門说墨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骏全,“玉大人,你說我怎么就攤上這事尼斧〗保” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵棺棵,是天一觀的道長(zhǎng)楼咳。 經(jīng)常有香客問我,道長(zhǎng)律秃,這世上最難降的妖魔是什么爬橡? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮棒动,結(jié)果婚禮上糙申,老公的妹妹穿的比我還像新娘。我一直安慰自己船惨,他們只是感情好柜裸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粱锐,像睡著了一般疙挺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怜浅,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天铐然,我揣著相機(jī)與錄音,去河邊找鬼恶座。 笑死搀暑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的跨琳。 我是一名探鬼主播自点,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脉让!你這毒婦竟也來了桂敛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后睦裳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耕渴,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了青伤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片边灭。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡潦牛,死狀恐怖眶掌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巴碗,我是刑警寧澤朴爬,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站橡淆,受9級(jí)特大地震影響召噩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逸爵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一具滴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧师倔,春花似錦构韵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓷胧,卻和暖如春显拳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搓萧。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工杂数, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘸洛。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓耍休,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親货矮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354