Kotlin基本语法 4 类

1.定义类

package classStudyclass Player {var name:String = "jack"get() = field.capitalize()set(value) {field = value.trim()}
}fun main() {val player = Player()println(player.name)player.name = "  asdas  "println(player.name)}

 2.计算属性与防范竞态条件

package classStudyclass Player {var name:String = "jack"get() = field.capitalize()set(value) {field = value.trim()}
}fun main() {val player = Player()println(player.name)player.name = "  asdas  "println(player.name)val also = player.name.also {println(it.count())}println("===========")println(player.name===also)//false不是同一个对象了}

3.对象的初始化

package classStudyimport kotlin.math.absoluteValueclass Player1(//这是主构造函数_name:String,_age:Int,_isNormal:Boolean,_id:String
) {var id = _idget() = field.capitalize()set(value) {field = value.trim()}var name = _nameget() = field.capitalize()private set(value) {field =value.trim()}var age = _ageget() = age.absoluteValueset(value) {field=age.absoluteValue}var isNormal = _isNormal
}fun main() {val player1 = Player1("Jack", 20, true, "hjmj")player1.id="s"}

4.主构造函数定义属性

package classStudyimport kotlin.math.absoluteValueclass Player2(//这是主构造函数_name:String,var age:Int,var isNormal:Boolean,var id:String
) {var name = _nameget() = field.capitalize()set(value) {field =value.trim()}}fun main() {val player1 = Player1("Jack", 20, true, "hjmj")player1.id="s"}

 5.次构造函数

package classStudyimport kotlin.math.absoluteValueclass Player2(//这是主构造函数_name: String,var age: Int,var isNormal: Boolean,var id: String
) {var name = _nameget() = field.capitalize()set(value) {field = value.trim()}constructor(name: String) : this(name, age = 10, isNormal = true, id = "13")constructor(name: String, age: Int) : this(name, age = age, isNormal = true, id = "13") {this.name = name.uppercase()}}fun main() {val player1 = Player1("Jack", 20, true, "hjmj")player1.id = "s"val player2 = Player2("rose")println(player2)val player3 = Player2("bose", 30)println(player3.name)}

 6. 默认参数

package classStudyimport kotlin.math.absoluteValueclass Player2(//这是主构造函数_name: String,var age: Int = 20,var isNormal: Boolean,var id: String
) {var name = _nameget() = field.capitalize()set(value) {field = value.trim()}constructor(name: String,isNormal: Boolean,id: String) : this(name, age = 10, isNormal = isNormal, id = id)constructor(name: String, age: Int) : this(name, age = age, isNormal = true, id = "13") {this.name = name.uppercase()}}fun main() {val player2 = Player2(_name = "a", isNormal = true, id = "12") //如果此构造函数和 主构造函数冲突了,会调用次构造函数println(player2.age)
}

 7.初始化代码块

package classStudyimport kotlin.math.absoluteValueclass Player2(//这是主构造函数_name: String,var age: Int = 20,var isNormal: Boolean,var id: String
) {var name = _nameget() = field.capitalize()set(value) {field = value.trim()}constructor(name: String,isNormal: Boolean,id: String) : this(name, age = 10, isNormal = isNormal, id = id)constructor(name: String, age: Int) : this(name, age = age, isNormal = true, id = "13") {this.name = name.uppercase()}init {//构建对象的时候执行 在构造器之后执行require(age>0){"age must be positive "}require(name.isNotBlank()){"Player must have a name  . "}}}fun main() {val player2 = Player2(_name = "", age = 12 ,isNormal = true, id = "12") //如果此构造函数和 主构造函数冲突了,会调用次构造函数println(player2.age)
}

 

8.初始化顺序

package classStudyclass Student(_name:String,val age:Int  // 顺序 1
) {var name = _namevar score = 10  // 顺序 2private val hobby = "music"val subject:Stringinit {// 顺序 3println("initializing student")subject = "math"}constructor(_name:String):this(_name, 10){// 顺序 4score = 20}}fun main() {Student("Jack")
}

9.延迟初始化lateinit 

package classStudyclass Player4 {lateinit var equipment:Stringfun ready(){equipment = "sharp knife"}fun battle(){if (::equipment.isInitialized) println(equipment)}}fun main() {val player4 = Player4()
//    player4.ready()player4.battle()
}

 10.惰性初始化

package classStudyclass Player5(_name:String
){var name = _nameval config by lazy { loadConfig() }private fun loadConfig():String{println("loading...")return "xxx"}
}fun main() {val p = Player5("Jack")Thread.sleep(3000)println(p.config)}

 11.初始化陷阱

11.1 陷阱1 必须保证先初始化类属性,在使用init方法调用

11.2 陷阱2 顺序问题

11.3 陷阱3 顺序问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.20 day2 QT

自由发挥登录窗口的应用场景,实现一个登录窗口界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("登入页面"); //设置 窗口 标题this->setWindowIcon(QIcon("D:…

深度学习图像处理基础

这里写目录标题 分辨率是什么 视网膜屏视网膜屏人眼的视觉视力 像素密度设置合适的PPI,制造视网膜屏 色彩是什么色匹配实验色彩匹配的意义量化色彩匹配白色合为1色度图 总结 HDR光亮度(尼特)灰阶亮度范围HDR显示技术总结 一级目录二级目录二级…

Job 和 DaemonSet

一、Job 1、Job 背景问题 K8s 里,最小的调度单元是 Pod,如果直接通过 Pod 来运行任务进程,会产生以下几种问题: ① 如何保证 Pod 内进程正确的结束? ② 如何保证进程运行失败后重试? ③ 如何管理多个任…

曾经爆火的「流批一体」现在怎么样了?

2021年和2022年,曾经有一个概念在整个数据开发方向传播,不管是懂和不懂的人,都能扯上一两句。那就是大家耳熟能详的「流批一体」。 时至今日,已经很少有人再提起这个话题,这个概念在21、22年很多面试中也会被面试官问到…

[嵌入式AI从0开始到入土]15_orangepi_aipro欢迎界面、ATC bug修复、镜像导出备份

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注:等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

单片机学习笔记---红外遥控(外部中断)

目录 红外遥控简介 硬件电路 基本发送与接收 NEC编码​​​​​​​ 遥控器键码 复习外部中断和定时器 红外遥控简介 红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出 通信方式:单工…

WebGL中开发科学数据可视化应用

WebGL在科学数据可视化领域有广泛的应用,可以用于呈现和解释复杂的科学数据。以下是在WebGL中开发科学数据可视化应用时的一些建议,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.选择合…

2、电源管理入门之开机详解

目录 1. 硬件上电 2. ATF运行 3. Linux启动 3.1 内核启动start_kernel 3.2 平台启动setup_arch 3.4 DTS初始化psci_dt_init 3.5 系统rest创建kernel_init线程 3.6 SMP初始化smp_init 3.7 PSCI接口psci_cpu_on 3.8 SMC返回secondary_entry 系统开机牵扯到:“我是…

记录人工智能领域的人、事、社区

曾梦想执剑走天涯,我是程序猿【AK】 目录 简述概要关注人物OpenAI团队成员 关注事件2015年2016年2017年2018年2019年2020年2021年2022年2023年2024年 关注社区OpenAITensorFlowPyTorchMIT Technology ReviewReddit Machine LearningIEEE Transactions on Neural Net…

java 使用documents4j将XML转为pdf文件的方式

1.背景: 通过spire.doc.free将word转换成PDF时存在缺陷:只能获取前3页。获取全文另外需支付费用。 2.解决办法 使用documents4j,documents4j会保留原word文件中更多的样式,如修订模式下的差异化字体颜色、文档右侧修订记录等。 …

Android Studio基础(下载安装与简单使用)

1、搭建Android开发平台 1.1 Android Studio 下载地址及版本说明 Android 开发者官网: https://developer.android.com/index.html(全球,需科学上网) https://developer.android.google.cn/index.html(国内&#xff…

十三、集合进阶——单列集合 及 数据结构

单列集合 及 数据结构 13.1 集合体系结构13.1.2 单列集合1. Collection2.Collection 的遍历方式迭代器遍历增强for遍历Lambda表达式遍历 3.List集合List集合的特有方法List集合的遍历方式五种遍历方式对比 4.数据结构1).栈2).队列3)数组4)链表小结5&…

PyTorch – 逻辑回归

data 首先导入torch里面专门做图形处理的一个库,torchvision,根据官方安装指南,你在安装pytorch的时候torchvision也会安装。 我们需要使用的是torchvision.transforms和torchvision.datasets以及torch.utils.data.DataLoader 首先DataLoa…

营销系统黑名单优化:位图的应用解析 | 京东云技术团队

背景 营销系统中,客户投诉是业务发展的一大阻碍,一般会过滤掉黑名单高风险账号,并配合频控策略,来减少客诉,进而增加营销效率,减少营销成本,提升营销质量。 营销系统一般是通过大数据分析建模…

2024年了,如何从 0 搭建一个 Electron 应用

简介 Electron 是一个开源的跨平台桌面应用程序开发框架,它允许开发者使用 Web 技术(如 JavaScript、HTML 和 CSS)来构建桌面应用程序。Electron 嵌入了 Chromium(一个开源的 Web 浏览器引擎)和 Node.js(一…

游戏行业洞察:分布式开源爬虫项目在数据采集与分析中的应用案例介绍

前言 我在领导一个为游戏行业巨头提供数据采集服务的项目中,我们面临着实时数据需求和大规模数据处理的挑战。我们构建了一个基于开源分布式爬虫技术的自动化平台,实现了高效、准确的数据采集。通过自然语言处理技术,我们确保了数据的质量和…

【PostgreSQL实现psql连接时候提示用户的密码有效时间】

如下内容使用session_exec插件结合自定函数实现。类似于触发器的原理。 功能需要严格在测试环境测试后,才可在正式环境使用。没有相关要求,还是建议直接查询pg_roles/pg_authid/pg_user; 一、判断是否需要修改用户密码和有效期的检查SQL 首…

【Emgu CV教程】7.1、图像锐化之Laplacian(拉普拉斯)算子锐化

文章目录 一、介绍二、举例1.原始素材2.代码3.运行结果 一、介绍 前面几篇讲的是图像平滑,就是抑制或消除噪声,并使得图像亮度及颜色变化更平缓的操作。在图像处理领域,与平滑操作相对应的,叫图像锐化。 图像锐化就是增强图像的边…

python OpenCV:seamlessClone泊松融合

一、seamlessClone函数的用法 翻译 https://www.learnopencv.com/seamless-cloning-using-opencv-python-cpp/ def seamlessClone(src, dst, mask, p, flags, blendNone): # real signature unknown; restored from __doc__"""seamlessClone(src, dst, mask, …

【Hudi】Upsert原理

17张图带你彻底理解Hudi Upsert原理 1.开始提交:判断上次任务是否失败,如果失败会触发回滚操作。然后会根据当前时间生成一个事务开始的请求标识元数据。2.构造HoodieRecord Rdd对象:Hudi 会根据元数据信息构造HoodieRecord Rdd 对象&#xf…