Kotlin 入门基础语法学习笔记

来源:互联网 发布:windows10查看mac表 编辑:程序博客网 时间:2024/06/05 07:53

敲了一天的kotlin基础语法,整理归纳到一个类里面,便于以后忘记的时候复习。

/** * Created by GG on 2017/11/20. *///main函数fun main(args: Array<String>) {    var testMain = TestMain()    print(testMain.array())}class TestMain {    //单例的写法    companion object {        @Volatile var instance: TestMain? = null            get() {                if (field == null) {                    synchronized(TestMain::class.java) {                        if (field == null)                            field = TestMain()                    }                }                return field            }    }    //变量定义    var name: String = ""    //常量数组int[][][] arrs = new int[3][2][1];    val arrs = Array(3) { Array(2) { IntArray(1) } }    val list = arrayListOf(String)//arrayListOf("a","b")    //返回一个String    fun testFun(name: String) {        this.name = name        println(this.name)    }    //加法函数,普通写法    fun add(a: Int, b: Int): Int {        return a + b    }    //加法函数表达式写法(public 方法必须写出返回类型)    fun add2(a: Int, b: Int): Int = a + b    //无返回值函数    fun noBack(msg: String, num: Int) {        print(msg + num)    }    //可变长度参数函数    fun extend(vararg v: Int) {        for (tempV in v) {            print(tempV)        }    }    //lambda函数 **    fun testLambda() {        val sumLambda: (Int, Int) -> Int = { x, y -> x + y }    }    //字符串模板 $ 的用法    fun testString() {        var a = 1        var s1 = "a is $a" //a is 1        println(s1)        a = 2        var s2 = "${s1.replace("is", "was")}"  //a was 1        println(s2)    }    //数组    fun array() {        //数组的两种写法        var arrays = arrayOf(1, 2, 3)        var arraysb = Array(3, { i -> (i * 2) })        arraysb[1] = 111        println(arraysb.toList().toString())    }    fun str() {        val text = ""    }    //NULL 检查机制  跑出异常加!!   允许为空加?    fun testNull() {        var age: String? = null  //类型后面加?表示可为空        var age1 = age!!.toInt()   //跑出空指针异常        var age2 = age?.toInt() //不对空null 做处理        var age3 = age?.toInt() ?: -1 //如果为空返回- 1        //  print(age3)    }    //比较    fun compare() {        var a: Int = 5222        println(a === a)    //对象地址相等,值相等        val box1: Int = a        val box2: Int? = a        //这里遇到了一个问题,如果 ?=是可以正常装箱的,但是 = 会导致box1和box2的对象地址一直相等        //说明只有 ?=才会正常装箱,而 = 则是直接赋值        //还要注意的是-127-128在JVM中是缓存的,所以无论是否装箱都会相等,指向相同的内存地址        println(box1 == box2)        println(box1 === box2)        println(a === box1)        println(a === box2)        println(a.javaClass)    }    //类型检查和自动转型   (Int? 表示为如果返回值不是Int,会返回空)    fun getStringLenght(obj: Any): Int? {        if (obj is String) {            // 做过类型判断以后,obj会被系统自动转换为String类型            return obj.length        }        //在这个分支中        if (obj !is Int) {            return null        }        //这里被转为了Int型        return obj        //甚至可以在同一个表达式中进行转换,这里可以看到obj.length == 2中obj已经成为String类型        if (obj is String && obj.length == 2) {            return obj.length        }        //这里的obj仍然是Any类型        return null    }    //区间算法    fun interval() {        //输出1234        for (i in 1..4) print(i)        //什么都不输出        for (i in 4..1) print(i)        //等同于 1 <= i && i <= 10        var i: Int = 2        if (i in 1..10) {            println(i)        }        //使用step指定步长        for (i in 1..4 step 2) println(i) //输出13        for (i in 4 downTo 1 step 2) println(i) //输出42        //使用utils 函数排除结束元素        for (i in 1 until 10) print(i)    }}