IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> (十六)Kotlin简单易学 基础语法-创建对象 -> 正文阅读

[移动开发](十六)Kotlin简单易学 基础语法-创建对象

(十六)Kotlin简单易学 基础语法-对象

对象

object关键字

? 使用object关键字,你可以定义一个只能产生一个实例的类-单例
? 使用Object关键字有三种方式
? 对象声明
? 对象表达式
? 半生对象

对象声明

对象声明有利于组织代码和管理状态,尤其是管理整个应用运行生命周期内的某些一致性状态。


object ApplicationConfig{

    init {
        print("ApplicationConfig init")
    }

    fun doSomething(){
        print("doSomething")
    }
}

fun main() {
    //类名也是实例名
    ApplicationConfig.doSomething()
    println(ApplicationConfig)
    println(ApplicationConfig)
}
//输出结果,都是同一对象
ApplicationConfig initdoSomethingkotlin05.ApplicationConfig@36d64342
kotlin05.ApplicationConfig@36d64342

对象表达式

有时候你不一定非要定义一个新的命名类不可,也许你需要某个现有类的一种变体实例,但只需要用一次就行了,事实上对于这种用完就丢的实例,连命名都可以省了。这个对象表达式是xx的字类,这个匿名类,依然是遵循object关键字的一个规则,即一旦实例化,该匿名只能有唯一一个实例存在。

open class Play{
    open fun load() = "load "
}

fun main() {
    val value = object : Play() { override fun load() = "anonymous nothing" }
    //输出结果 anonymous nothing
    println(value.load())
}

伴身对象

如果你想将某个对象的初始化和一个类实例捆绑在一起,可以考虑使用伴生对象,使用companion修饰符,你可以在一个类定义声明一个伴生对象,一个类里只能有一个伴生对象。

open class ConfigMap{
    //当只有实例化ConfigMap或者调用load ,这个函数才会实例化,
    // 不管调用多少次,始终只有一次
    companion object{
        private const val Path ="xxx"
        fun load()= File (Path).readBytes()
    }
}

fun main() {
    ConfigMap.load()
}

嵌套类

如果一个类只对另一个类有用,那么将其嵌入到该类中并使用这个两个类保持在一起是合乎逻辑的,可以使用嵌套类。

class Player {
    class Equipment(var name:String){
        fun show() = print("Equipment $name")
    }
    fun battle(){
    }
}


fun main() {
    Player.Equipment("sharp knife").show()
}

数据类

数据类,是专门设计用来存储数据的类
数据类提供了toString的个性化实现
==符号默认情况下,比较对象就是比较它们的引用值,数据类提供了equals和hashCode的个性化实现


data class Coordinate(var x:Int,var y:Int){
    val isInBound = x>0&& y>0
}

fun main() {
    println(Coordinate(10,20))
}

比较对象

 data class Coordinate(var x:Int,var y:Int){
    val isInBound = x>0&& y>0
}

fun main() {
    //==比较的是内容,equals Any 默认实现===,比较引用
    //===比较的是引用
    //输出ture
    println(Coordinate(10,20)==Coordinate(10,20))
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:46:02  更:2022-05-18 17:48:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 1:50:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码