kotlin学习记录

1.Array. 等价java中的数组类型
2.kotlin类中声明的成员变量(无论是var/val)都必须初始化,或者使用lateinit修饰,在后面使用前初始化,这和java不一样,防止出现NullPointException;
但是在kotlin函数中的局部变量是可以不用初始化,编译可以通过;
还有一种,可以通过自定义访问器给属性赋值

class Student(val name: String, var age: Int) {
   // 自定义属性访问器
   val isSquare: Boolean
       get() {
           return name == "lala"
       }
}

3.创建kotlin的文件时会有一个选择,file,class,这个两个的区别是,如果这个文件有并排的两个class,这个文件就是xxx.kt,如果只有这一个class,文件为xxx


image.png

image.png

创建kotlin文件时一般选择类型为class,后续如果有并排的class会自动转换为file类型,增加.kt
后缀
4.if在kotlin中是表达式,有返回值,when是类似java中的switch,但是when也是表达式,有返回值,他们会把最后一个表达式会被作为结果返回;
when中没有break,不会穿透执行,如果需要多个值匹配,需要值之间用“,"分隔开,when允许使用任何对象作为作为分支条件,不像java必须是常量(枚举常量,字符串或者数字);when还可以不用带参数;

fun testWhen(num: KotlinEnum) {
       val value = when (num) {
           KotlinEnum.RED,KotlinEnum.BLUE -> "k"
           else -> "else"
       }
       println("when:is $value")
   }


fun whenTest(num1: KotlinEnum,num2: KotlinEnum){
       when  {
           num1 == KotlinEnum.BLUE && num2 == KotlinEnum.RED ||
               num1 == KotlinEnum.RED && num2 == KotlinEnum.BLUE -> 1
           else -> 2
       }
   }

5.Set集合,kotlin有一个set集合:https://www.jianshu.com/p/3c95d7729d69
集合的遍历:

fun testSet(){
       // setOf返回的是不可变的有序的集合
        val  set = setOf<String>("2","3")
        // for + in 是对set集合的遍历
        for (name in set) {
            println(name)
        }
    }

6.is 相当于java中的instanceOf,不同之处,java中需要显示的类型转换后才能使用,如果需要多次使用需要用局部变量保存,kotlin不需要

fun testIs(stu: Fu){
        // is 相当于java中的instanceOf,不同之处,java中需要显示的类型转换后才能使用,如果需要多次使用需要用局部变量保存,kotlin不需要
        if (stu is Stu) {
            // 能访问的属性必须是一个val属性,不能有自定义的访问器,否则不能保证每次返回同样的值
            println(stu.a)
        }
        // 特定类型的显示转换
        val stu1 = stu as Stu
        println(stu1.a)
    }

7.for循环遍历

fun testFor(){
        val array = IntArray(4)
        // array这个数组的下标
        for (i in array.indices){

        }
        // 包含右边的结束值的区间
        for (i in 100 downTo 1 step 2) {

        }
        // until 不包含100的区间
        for (i in 1 until 100) {

        }

        val treeMap:TreeMap<Char,String> = TreeMap()
        // map,通过map[key] 来读取值 ,map[key] = value 赋值,不用通过put,get方法
        treeMap['a'] = "aaaa"
        treeMap['b'] = "bbbb"
        // treemap的遍历
        for ((key,value) in treeMap) {
            println("$key = $value")
        }

        val list = arrayListOf<Int>(3,5)
        for ((index,element) in list.withIndex()) {

        }

        
    }

8.trow,try是一个表达式,if/when(switch)也是表达式

val percentage = 0
        if (percentage !in 0..100) {
            // throw是一个表达式
            throw IllegalArgumentException("")
        }

        // try是一个表达式
        // 如果一个try代码块执行一切正常代码块中的最后一个表达式就是结果,如果捕获了异常,相应的catch代码块中最后一个表达式就是结果
        val number = try {
            Integer.parseInt("34")
        } catch (e:NumberFormatException) {
            return
        }

        println(number)

9.扩展函数,是静态函数,在java中可以通过文件名.方法名,直接调用,扩展函数不能被重写
扩展函数是写在类的外面


image.png

使用是,可以import这个函数;

10.to函数 中缀调用,能以中缀调用的函数需要用infix修饰, 处理单个参数的函数;

 // to 中缀调用  to函数有infix修饰
        val map = hashMapOf<Int,String>(1 to "one",7 to "seven")

11.kotlin中的String增加了一些扩展方法,还可以继续使用正则表达式,三重引号的字符串可以避免转义字符,可以包含任何字符;
12.嵌套的类默认不是内部类:他们并没有包含对其外部类的隐式引用;kotlin有一个可以声明类并创建这个类的一个实例的object关键字(类似于java的匿名类);使用:代替java中的extends/implements关键字;同java一样,一个类可以实现多个接口,但只能继承一个类;
kotlin中,接口里可以有默认方法(提供了方法体),但是java中没有这样的语法,java中如果继承了kotlin的接口,必须实现所有的方法;

12.修饰符:

class DataModel {

    var name: String? = null  // ??
    lateinit var name1: String
    val age: Int = 2
    // 先走init,再走constructor,这两个
     init {
        println("init: ")
    }
// 
    constructor() {
        println(": constructor")
    }
    fun setup() {
       // name1初始化,使用name1之前必须先调用这个方法进行初始化,否则报异常
        name1 = "lala"
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容