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,一经查实,立即删除!

相关文章

Java 学习和实践笔记(12)

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

正大国际期货:日内交易

日内交易是一种交易模式&#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…

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的主要功…

反射的作用

获取一个类里面所有的信息&#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 父类中保护权限 子类中变为…

自定义Linux登录自动提示语

设置提示语的方式 在Linux系统中&#xff0c;可以通过修改几个特定的文件来实现在用户登录时自动弹出提示语。以下是几个常用的方法&#xff1a; 1. 修改/etc/issue文件&#xff1a; 这个文件用于显示本地登录前的提示信息 sudo vi /etc/issue在项目合作的时候&#xff0c;…

平衡二叉树(AVL树)

定义&#xff1a; 左右子树高度之差不超过1左右子树都是平衡二叉树 平衡二叉树的增删操作都离不开二叉树的调整 二叉树调整 LL型&#xff1a;右旋 LR型&#xff1a;左旋右旋 RR型&#xff1a;左旋 RL型&#xff1a;右旋左旋

FPFH特征描述符、对应关系可视化以及ICP配准

一、FPFH特征描述符可视化 C #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/search/kdtree.h> #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d_omp.h>//使用OMP需要添加的头文件 #include <boo…

批量追踪中通快递

在物流信息的管理中&#xff0c;批量追踪中通快递单号一直是个让人头疼的问题。但有了固乔快递查询助手&#xff0c;这一切都变得轻而易举。 固乔快递查询助手&#xff0c;作为市场上备受好评的快递查询软件&#xff0c;专门针对批量查询需求进行了优化。用户只需将中通快递单号…

【Linux】简单的网络计算器的实现(自定义协议,序列化,反序列化)

文章目录 前言一、 服务端1.ServerCal.cc&#xff08;服务器主文件&#xff09;2.ServerCal.hpp3.Sock.hpp(套接字封装)4.TcpServer.hpp(服务器)5.Protocol&#xff08;自定义协议&#xff09; 二、用户端1.ClientCal 三、Log.hpp&#xff08;日志&#xff09;四、makefile 前言…