美文网首页
Kotlin笔记 类型、变量、函数

Kotlin笔记 类型、变量、函数

作者: 橙果子 | 来源:发表于2021-04-21 20:57 被阅读0次

    跟着扔物线大佬的kotlin学习之旅开始了

    变量、函数和类型

    一.基本数据类型

    分类 类型 位宽
    浮点型 Double 64
    浮点型 Float 32
    整型 Long 64
    整型 Int 32
    整型 Short 16
    字节 Byte 8

    *Kotlin 中的 ==和Java的equals 等价

    注意: 在Java里面把基本数据类型和引用类型做了区分,例如int 和 Integer 这两个类型. 在Kotlin中不区分基本数据类型和包装类型,永远都是同一个类型(比如:Int)

    转义字符

    二.申明变量以及注意事项

    变量不可空

    var name: String ="test"
    
    • kotlin变量无默认值
    • 在 Kotlin 里面,所有的变量默认都是不允许为空的
    • 变量不可直接赋值为null, Kotlin有空安全设计

    变量的值要想设置为空,需要解除非空限制

    //类型右边加一个 ? 号,解除它的非空限制
    var view: View? = null
    //解除非空限制后,在代码的任意地方都可以赋null
    var name: String? = "Z"
    name = null
    

    但是可能为空的变量,不允许使用, 即便是加了非空判断

    //可能为空的变量,不允许使用, 即便是加了非空判断
    var view: View? = null
    view.setBackgroundColor(Color.BLACK) //该行代码会报错
    

    延迟初始化 lateinit

    延迟初始化对变量的赋值次数没有限制,你仍然可以在初始化之后再赋其他的值给 view

     lateinit var view: View
    

    类型判断

    Kotlin 申明变量赋值,不写变量类型也是可以的
    kotin会做类型判断,但是和动态类型是不一样的

    var name: String = "M"
    var name= "M"
    

    不可中途更换数据类型

    var name = "Mike"
    name = 1
    // 👆会报错,The integer literal does not conform to the expected type String
    

    var 和 val

    var 是 variable 的缩写,val 是 value 的缩写。

    val 只能赋值一次,不能被修改 ,和java中的final类似

    三 . 函数

     fun cook(name: String) {
        }
    

    Kotlin 返回是 Unit,可省略

    fun main(): Unit {}
    // Unit 返回类型可以省略
    fun main() {}
    

    传参注意项

    • 可空变量不可传给可空参数方法
    • 变量和方法的参数,需同时可为空,或同时不为空
    // 👇可空变量传给不可空参数,报错
    var myName : String? = "rengwuxian"
    fun cook(name: String) : Food {}
    cook(myName)
      
    // 👇可空变量传给可空参数,正常运行
    var myName : String? = "rengwuxian"
    fun cook(name: String?) : Food {}
    cook(myName)
    
    // 👇不可空变量传给不可空参数,正常运行
    var myName : String = "rengwuxian"
    fun cook(name: String) : Food {}
    cook(myName)
    

    四 .可见性

    函数如果不加可见性修饰符的话,默认的可见范围和变量一样也是 public 的
    override 例外

    五. 属性的getter/setter函数

    *getter / setter 函数有了专门的关键字 get 和 set
    *getter / setter 函数位于 var 所声明的变量下面
    *setter 函数参数是 value
    *val 声明的变量不能重写setter函数

    class User {
        var name = "Mike"
            👇
            get() {
                return field + "nb"
            }
            👇   👇 
            set(value) {
                field = "Cute " + value
            }
    }
    

    六. 类

    1. 类的可见性, kotlin的类默认是public的
    2. kotlin 里的类默认是 final的, 而 Java 里只有加了 final 关键字的类才是 final 的(接触final用 open)
    open class MainActivity : AppCompatActivity() {}
    
    • open 没有父类到子类的遗传性
    1. 继承是用:
    2. implement 实现也是:
    class MainActivity : AppCompatActivity(), Impl {}
    

    Kotlin 把构造函数单独用了一个 constructor 关键字来和其他的 fun 做区分。

    override 的不同

    • Java 里面 @Override 是注解的形式。
    • Kotlin 里的 override 变成了关键字。
    • Kotlin 省略了 protected 关键字,也就是说,Kotlin 里的 override 函数的可见性是继承自父类的。
    • override 是有遗传性的
    class NewActivity : MainActivity() {
        // 👇onCreate 仍然是 override 的
        override fun onCreate(savedInstanceState: Bundle?) {
            ...
        }
    }
    

    关闭 override 的遗传性,只需要这样即可:

    open class MainActivity : AppCompatActivity() {
        // 👇加了 final 关键字,作用和 Java 里面一样,关闭了 override 的遗传性
        final override fun onCreate(savedInstanceState: Bundle?) {
            ...
        }
    }
    

    abstract 关键字的不同

    • abstract 关键字修饰的类无法直接实例化
    • 会和 abstract 修饰的函数一起出现
    • 也可以没有这个 abstract 函数
    abstract class MainActivity : AppCompatActivity() {
        abstract fun test()
    }
    
    • 子类如果要实例化,还需要实现MainActivity里面的 abstract 函数:

    实例化类

    var activity: Activity = NewActivity()
    

    类型判断和强转

    • as强转成一个错误类型, 会抛出异常
    • as? (如果强转成功就执行,如果不成功就不执行)
    (activityno as? NewActivity).actions()
    
    

    相关文章

      网友评论

          本文标题:Kotlin笔记 类型、变量、函数

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