Kotlin基本语法 3 类

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/688220.shtml

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

相关文章

Docker之MongoDB安装、创建用户及登录认证

Docker之MongoDB安装、创建用户及登录认证 文章目录 Docker之MongoDB安装、创建用户及登录认证1. 拉取镜像2. 创建宿主机容器数据卷3. 运行mongodb容器1. 运行容器2. 创建用户3. 创建数据库并设置密码 1. 拉取镜像 docker pull mongo:4.2.212. 创建宿主机容器数据卷 运行docke…

Java 学习和实践笔记(12)

这个就比较有意思了&#xff01;所有的事情&#xff0c;拆分完之后&#xff0c;都有且只有这三种状态流程&#xff01; //TIP To <b>Run</b> code, press <shortcut actionId"Run"/> or // click the <icon src"AllIcons.Actions.Execute&…

Redis分布式可重入锁实现方案

前言 在单进程环境下&#xff0c;要保证一个代码块的同步执行&#xff0c;直接用synchronized 关键字或ReetrantLock 即可。在分布式环境下&#xff0c;要保证多个节点的线程对代码块的同步访问&#xff0c;就必须要用到分布式锁方案。 分布式锁实现方案有很多&#xff0c;有基…

突破编程_C++_面试(变量与常量)

面试题 1 &#xff1a; C 中的变量存储类别有哪些&#xff0c;并简要描述它们的特点&#xff1f; 在C中&#xff0c;变量的存储类别决定了变量的生命周期和可见性。以下是C中的几种变量存储类别及其特点&#xff1a; 自动存储期 也称为局部存储类别。这类变量在函数或代码块…

正大国际期货:日内交易

日内交易是一种交易模式&#xff0c;英文名字是daytrade,主要是指持仓时间短&#xff0c;不留过夜持仓的交易方式。日内交易捕捉入市后能够马上脱离入市成本的交易机会&#xff0c;入市之后如果不能马上获利&#xff0c;就准备迅速离场

程序员可以做一辈子吗?大龄程序员出路在哪?

前言 随着2023年AI的出现&#xff0c;大家对待程序员工作有了一丝丝危机感&#xff0c;特别是今年整个IT行业进入了前所未有的寒冬期&#xff0c;让程序员不得不思考未来的职业发展。 甚至很多程序员一想到自己接近35岁&#xff0c;焦虑感油然而生&#xff0c;这也是大部分程…

基于YOLOv7算法的高精度实时雾天车辆行人目标检测系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时雾天车辆行人目标检测系统可用于日常生活中检测与定位bicycle、bus、car、motorbike和person&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。…

数据采集新纪元:Linux边缘计算技术在智慧工厂的应用解析

在当今全球智能制造的大潮下&#xff0c;Linux边缘计算网关正扮演着愈发重要的角色。它位于数据产生源头与云计算中心之间&#xff0c;为智慧工厂提供了关键的实时决策能力和高效的预测性维护解决方案。 以一家领先汽车零部件生产商为例&#xff0c;其高度自动化的生产线上的每…

C/C++数据结构——剖析排序算法

1. 排序的概念及其运用 1.1 排序的概念 https://en.wikipedia.org/wiki/Insertion_sorthttps://en.wikipedia.org/wiki/Insertion_sort 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的…

力扣hot2--哈希

推荐博客&#xff1a; for(auto i : v)遍历容器元素_for auto 遍历-CSDN博客 字母异位词都有一个特点&#xff1a;也就是对这个词排序之后结果会相同。所以将排序之后的string作为key&#xff0c;将排序之后能变成key的单词组vector<string>作为value。 class Solution …

探索未来科技前沿:深度学习的进展与应用

深度学习的进展 摘要&#xff1a;深度学习作为人工智能领域的重要分支&#xff0c;近年来取得了巨大的进展&#xff0c;并在各个领域展现出惊人的应用潜力。本文将介绍深度学习的发展历程、技术原理以及在图像识别、自然语言处理等领域的应用&#xff0c;展望深度学习在未来的…

SQL29 计算用户的平均次日留存率(lead函数的用法)

代码 with t1 as(select distinct device_id,date --去重防止单日多次答题的情况from question_practice_detail ) select avg(if(datediff(date2,date1)1,1,0)) as avg_ret from (selectdistinct device_id,date as date1,lead(date) over(partition by device_id order by d…

Effective Objective-C 学习(三)

理解引用计数 Objective-C 使用引用计数来管理内存&#xff1a;每个对象都有个可以递增或递减的计数器。如果想使某个对象继续存活&#xff0c;那就递增其引用计数&#xff1a;用完了之后&#xff0c;就递减其计数。计数变为 0时&#xff0c;就可以把它销毁。 在ARC中&#xf…

C++入门学习(二十八)跳转语句—continue语句

当在循环中遇到continue语句时&#xff0c;它会跳过当前迭代剩余的代码块&#xff0c;并立即开始下一次迭代。这意味着continue语句用于跳过循环中特定的执行步骤&#xff0c;而不是完全终止循环。 直接看一下下面的代码更清晰&#xff1a; 与上一节的break语句可以做一下对比…

什么是软件测试?软件测试的目的与原则是什么?

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

原创详解OpenAI Sora是什么?技术先进在哪里?能够带来什么影响?附中英文技术文档

一&#xff1a;Sora是什么 Sora是一个文本到视频的模型&#xff0c;由美国的人工智能研究机构OpenAI开发。Sora可以根据描述性的文本提示&#xff0c;生成高质量的视频&#xff0c;也可以根据已有的视频&#xff0c;向前或向后延伸&#xff0c;生成更长的视频。 Sora的主要功…

UPC训练赛二十/20240217

A:无穷力量 题目描述 2022年重庆突发山火让世界看到了中国一个又一个的感人事迹&#xff1a;战士们第一时间奔赴火场&#xff0c;志愿者们自发组成团队&#xff0c;为救火提供一切的可能的服务&#xff0c;人们自发输送物资&#xff0c;有的志愿者甚至几天几夜没有睡觉。每个…

反射的作用

获取一个类里面所有的信息&#xff0c;获取到了之后&#xff0c;再执行其他的业务逻辑结合配置文件&#xff0c;动态的创建对象并调用方法 练习1&#xff1a; public class MyTest {public static void main(String[] args) throws IllegalAccessException, IOException {Stude…

Swift 5.9 新 @Observable 对象在 SwiftUI 使用中的陷阱与解决

概览 在 Swift 5.9 中&#xff0c;苹果为我们带来了全新的可观察框架 Observation&#xff0c;它是观察者开发模式在 Swift 中的一个全新实现。 除了自身本领过硬以外&#xff0c;Observation 框架和 SwiftUI 搭配起来也能相得益彰&#xff0c;事倍功半。不过 Observable 对象…

C++学习Day06之继承方式

目录 一、程序及输出1.1 公共继承1.1.1 父类中公共成员&#xff0c;子类可以正常访问1.1.2 父类中保护成员&#xff0c;子类类外不可以访问1.1.3 父类中私有成员&#xff0c;子类无法访问 1.2 保护继承1.2.1 父类中公共权限 子类中变为 保护权限1.2.2 父类中保护权限 子类中变为…