美文网首页
Kotlin基础

Kotlin基础

作者: izheer | 来源:发表于2022-05-12 16:48 被阅读0次

一、基础语法

1、var、val变量定义;val不可修改类似final;

var <变量名> :<类型> = <初始化值>

val <变量名> :<类型> = <初始化值>

如下定义:

    var name : String = “abc”
其中可以直接省略 类型,如:var name = "abc" // 类型推导

2、Fun函数定义;

与java不同的点,fun函数可以在类外定义函数;

Unit相当于java的 void返回,可以不写,默认返回Unit(Void)

fun main():Unit{

} 

具有返回值的例子:

fun:add(num1 : Int, num2 : Int): Int{

    return num1 + num2

}

fun:add2(num1:Int,num2:Int) = num1 + num2 //使用类型推导,推导出返回值为Int

可变参数、可变长的参数

fun:method(vararg value : Int){

    for( i :Int in value){

        println(i)

    }

}

lambda 表达式函数

var method : (Int,Int) -> Int = {num1,num2 - > num1+ num2}

var res:int= method(1,1)

3、String 使用

val name = “abc”

val age = 22

println(“name$name,  age$age”)//使用美元符号$拼接字符串

//换行,三个引号换行; .trimIndent() 函数去掉前置空格;

val info = """

        AAAAAA

        BBBBBB

 """.trimIndent()

4、Null机制检查

var name:String?=null

name?.length  //如果为null不执行,不会发生空指针异常 

name!!.length //如果为null,发送空指针异常

//Int? 返回类型,可以返回null

fun:test(name:String):Int?{

}

//三目运算符

var info:String?=null
info?.length ?: "info为null"

5、in 区间

for(i:int in 1..9){

}

for(i:int downTo 9..1){

}

in 其中只可以从小到大;downTo 是从大到小;

用in区间做判断,如:var value = 2;if(value in 1..100)

指定间隔 step, 如:for(i:int in 1..20 step 2),间隔2循环数组1-20的数

用于排除until,如:for(i : int in 1 until 10),排除10,输出1到9的数

二、比较和数组

1、比较

比较两个值

val name1 = “Alice”

val name2 = “Alice”

name1.equals(name2)  //true 不推荐这样写,而是推荐使用==

name1 == name2  //true

比较对象地址,使用三个等号===

val name1 = “Alice”

val name2 = “Alice”

name1 === name2  // 输出:false

2、数组

第一种模式

val nums : Array<Int> = arrayOf(1,2,3,4,5)

println(nums[0])

第二种模式,20个size,value = 0开始value取值0、20,然后每个value + 1001,

val nums:Array<Unit> = Array(20,{value:Int -> (value + 1001)} )

三、条件控制

if 是属于表达式,具有返回值。

val max : Int = if(num1 > num2) num1 else num2 // 表达式比较大小

val max :Int = if(num1 > num2){

    //TODO  ....代码

    num1

}else{

    //TODO  ....代码

    num2

}

switch 的写法,同时 when也具有返回值

基础写法

val num = 11

when(num){

    1->println("一")

    11->println("十一")

    else ->println("else")

}

//具有返回值写法

val num = 11

val str : String = when(num){

    1->{

        println("一")

        "一"

    }

    11-> { 

        println("十一")

        "十一"

    }

    else -> { 

        println("else")

        "else"

     }

}

四、循环和标签

标签 xxx@ 自定义的标签

class 类 系统会自带一个标签,如 class Person{} this@Person

循环

var items :List<String>  = listOf<String>("a","b","c")

for(item in items){

     println(item)

}

items.forEach{

    println(it)

}

遍历,打印下标

for(index in items.indices){

        println("下标:$index , 对应的值:${items[index]}")

}

五、类与对象

类 默认是public ,可以不需要添加public

空类,可以不需要{}

定义空类:

class Empty

构造函数(class类需要添加open修饰才可以被继承)

主构造函数、次构造函数

open class Person(id : Int){ // 主构造

        constructor(id : Int , name : String) : this(id){ // 次构造必须引入主构造 :this(id)

        }

      //构造函数重载

        constructor(id :Int , sex : Char): this(id){

        }

        //无参构造函数

        constructor(): this(12){

        }

}

定义对象,不能使用new

var p = Person() //调用无参构造

继承和实现 使用:继承。class类需要添加open修饰才可以被继承

class Student (id : Int): Person( id){

}

定义类的成员变量

class Student (id : Int): Person( id){

        lateinit var name : String  // lateinit  懒加加载初始化,kotlin中全部无默认值

       var age :Int  = 0

}

抽象类 与 接口

接口,默认都是open 修饰

interface Callback{

}

抽象类

abstract Person :Callback{ //多个接口,只需要用  逗号, 隔开

        abstract fun getId() : Int  

       abstract fun initView() : Unit  //返回空,可以不写 : Unit

} 

实现抽象类和接口

class Student :Person(){ //继承必须需要加() 表示是构造函数

    override  fun getId() : Int   = 33

    override  fun initView() { }

}

data 定义数据类(实体Bean);其中:data 字段的使用,可以快捷生成javaBean类

data class User(val id : Int, var name :String , val sex : Char)

//使用数据类(实体bean)‘

val user = User(11,"Alice","F")

克隆、复制

val(xId,xName,xSex) = user.copy()

println("xId:$xid ,xName:$xname,xSex:$xSex") 

//拒绝复制, 使用下划线 _

val(_,xName,xSex) = user.copy()

println("xId:$xid ,xName:$xname,xSex:$xSex") 

单例 ,使用object字段修饰

object Person{

    fun test(){

    }

}

//使用

Person.test()

单例模式,demo

class Test{

    object Holder{

        var instance = Test()

    }

    //使用派生companion object,实现static

    companion object{

            //在派生中写的代码逻辑,全部属于静态的

            fun getInstance() : Test {  // 简写:  fun getInstance() : Test = Holder.instance

                return Holder.instance

            }

    }

}

//使用

fun main(){

    var test : Test = Test.getInstance()

}

内部类必须使用inner 修饰,若没有inner,则是属于嵌套类,嵌套类不能访问外部类的成员

class Test{

    class Holder{ // 嵌套类

    }

    inner class Holder{ // 内部类 

    }

}

相关文章

网友评论

      本文标题:Kotlin基础

      本文链接:https://www.haomeiwen.com/subject/zixeurtx.html