前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin中的常用类及其使用

Kotlin中的常用类及其使用

作者头像
wresource
发布2023-01-31 17:01:28
1K0
发布2023-01-31 17:01:28
举报
文章被收录于专栏:云服务器开发
  • 一、构造函数和初始化块

  • 1.初始化块
  • 2.主构造函数
  • 3.次构造函数
  • 4.他们之间的联系

  • 二、属性
    • 1.属性的声明
    • 2.避免递归调用的幕后字段
  • 三、常用的类

一、构造函数和初始化块

1.初始化块

代码的初始化工作由它负责,在调用主构造函数之前执行,这部分理论上可以进行任何工作,但建议类的初始化赋值可以放在这,其余的最好由其他专门的地方处理,采用init关键字

代码语言:javascript
复制
init{
    println("ww cool")
}

2.主构造函数

主构造函数只能由一个,初始化块相当于放在主构造函数的无参函数中,按顺序执行初始化块,这一点和传统的面向对象编程中的主构造函数没有太大的区别。由关键字constructor提供,一般情况省略此关键字

代码语言:javascript
复制
class MyClass (name:String){
    
}

//或者使用关键字
class MyClass constructor(name:String){
    
}

3.次构造函数

同样使用constructor关键字作为函数名,但它不能省略函数名,使用时需要调用主构造函数

代码语言:javascript
复制
class MyClass constructor(name:String){
    constructor(name1:String,name2:String):this(name1){
        //这部分规则和大多数面向对象的规则差不多
    }
}

谈谈主构造函数和次构造函数的区别

  • 次构造函数可以有多个,而主构造函数只能有一个
  • 次构造函数可以包含代码,主构造函数不行
  • 次构造函数属性不能用var和val关键字修饰而主构造函数可以

4.他们之间的联系

初始化块有多个的情况下,按照声明顺序执行,主构造函数调用之前会执行初始化块,而次构造函数调用之前会先执行主构造函数的初始化块然后再调用主构造函数

代码语言:javascript
复制
//顺序如下
初始化块->主构造函数->次构造函数

二、属性

1.属性的声明

最简单的方式

代码语言:javascript
复制
class MyClass(){
    val name:String
}

此时默认已经帮你创建好了getter和setter,val 类型的只有getter,var类型的两个都有

也可以手动创建getter和setter,如果对它们不满意的话

代码语言:javascript
复制
class MyClass(){
    var name:String
    get() = "my"
    //set等下请看幕后字段
}

2.避免递归调用的幕后字段

下面这个代码看上去好像没有问题,但事实上它递归调用了属性的get和set方法

代码语言:javascript
复制
class MyClass(){
    var name:String
    get() = name
	set(value){
        this.name = value
    }
}

执行一下,果然报错了,栈溢出报错

1

原因就是递归调用了name这个属性导致的,所以这就要引入一个幕后字段进行调整,便于再setter和getter时替换变量

代码语言:javascript
复制
class MyClass(){
    var name:String
    get() = field
	set(value){
        field = value
    }
}

这一点和java语言差异比较大,需要注意一下,不过平时基本上不会用到自定义的setter和getter,所以不用这么担心

三、常用的类

抽象类

含有抽象方法的类称为抽象类,这一点和java里面很像

内部类

使用inner关键字,可以访问内部类外的属性

代码语言:javascript
复制
class outer{
    val name = "ww"
    inner class inside{
        println("my name is $name")
    }
}

嵌套类

和内部类很像,但是没有加inner关键字,不能访问外部的变量

代码语言:javascript
复制
class outer{
    val name = "ww"
    class inside{
        println("my name is ww")
        //不能直接调用外部的变量
    }
}

枚举类

与传统的java写法相比,由于少了getter和setter,所以代码显得相当简洁,也很容易读懂

代码语言:javascript
复制
enum class Color ( var colorName: String, var number:Int){
    Green("绿色",1),
    Blue("蓝色",2)
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 android 踩坑小天才 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、构造函数和初始化块
    • 1.初始化块
      • 2.主构造函数
        • 3.次构造函数
          • 4.他们之间的联系
          • 二、属性
            • 1.属性的声明
              • 2.避免递归调用的幕后字段
              • 三、常用的类
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档