Kotlin 类

1、声明

class 关键字声明类

类声明类名类头(指定其类型参数、主构造函数等)以及由花括号包围的类体构成;类头与类体都是可选的; 如果一个类没有类体省略花括号 

class Person { /*……*/ }// 没有声明任何(主或次)构造函数,它会有一个生成的不带参数的主构造函数
// 构造函数的可见性是 public
class Empty
2、主构造函数 

一个类一个主构造函数并可能有一个或多个次构造函数主构造函数类头中声明,它跟类名与可选的类型参数

class Person constructor(firstName: String) { /*……*/ }

主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字 

// 单参数,firstName 属于主构造函数局部变量
class Person(firstName: String) { /*……*/ }
// 多个参数,firstName firstName 属于类只读属性,age 属于类可读写属性
class Person(val firstName: String, val firstName: String, var age: Int)
// 具有默认参数,firstName firstName 属于类只读属性,var 属于带默认值的类可读写属性
class Person(val firstName: String, val lastName: String, var isEmployed: Boolean = true)

 如果构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,并且这些修饰符在它前面

class Customer public @Inject constructor(name: String) { /*……*/ }
 3、次构造函数

 类体内使用 constructor 前缀 声明 次构造函数

class Person(val pets: MutableList<Pet> = mutableListOf())class Pet { // 声明次构造函数constructor(owner: Person) {owner.pets.add(this)}
}

一个主构造函数,每个次构造函数需要委托主构造函数, 直接委托或者通过别的次构造函数间接委托委托到同一个类的另一个构造函数用 this 关键字即可

class Person(val name: String) {val children: MutableList<Person> = mutableListOf()constructor(name: String, parent: Person) : this(name) {parent.children.add(this)}
}
4、初始化块

类体内init 关键字花括号 { } ,为变量赋值 , 执行一些检查相关的代码

class Constructors {init {println("Init block")}constructor(i: Int) {println("Constructor $i")}
}
5、类成员

类可以包含:

  • 构造函数与初始化块
  • 函数
  • 属性
  • 嵌套类与内部类
  • 对象声明
6、类实例化

创建一个类的实例只需像普通函数一样调用构造函数

val invoice = Invoice()
val customer = Customer("Joe Smith")

实例化执行顺序

  • 主构造函数 中属性赋值
  • 类中的属性赋值 和 init 初始化块 同一个层级,按出现的顺序执行
  • 次构造函数 中的代码执行
class InitOrderDemo(// 主构造函数value: Int,   // 临时变量, 为secondProperty属性赋值var mainProperty: String // 在主构造函数中定义类属性mainProperty
) {// 类属性var firstProperty = "第一个属性: $value".also(::println)var secondProperty: Int = value// 初始化块1init {println("执行第一个初始化块, mainProperty: $mainProperty")println("执行第一个初始化块, firstProperty: $firstProperty")println("执行第一个初始化块, secondProperty: $secondProperty")// 位于 thirdProperty 属性前,所以无法访问 thirdProperty//println("执行第一个初始化块, thirdProperty: $thirdProperty")}// 次构造函数constructor(_value: Int): this(_value, "次构造函数") {thirdProperty = "构造函数赋值"println("执行次构造函数, mainProperty: $mainProperty")println("执行次构造函数, firstProperty: $firstProperty")println("执行次构造函数, secondProperty: $secondProperty")println("执行次构造函数, thirdProperty: $thirdProperty")}// 类属性var thirdProperty = "第三个属性"// 初始化块2init {println("执行第一个初始化块, mainProperty: $mainProperty")println("执行第二个初始化块, firstProperty: $firstProperty")println("执行第二个初始化块, secondProperty: $secondProperty")// thirdProperty 属性已经存在,可以访问println("执行第二个初始化块, thirdProperty: $thirdProperty")}
}
fun main() {InitOrderDemo(123, "测试顺序")
/*第一个属性: 123执行第一个初始化块, mainProperty: 测试顺序执行第一个初始化块, firstProperty: 第一个属性: 123执行第一个初始化块, secondProperty: 123执行第一个初始化块, mainProperty: 测试顺序执行第二个初始化块, firstProperty: 第一个属性: 123执行第二个初始化块, secondProperty: 123执行第二个初始化块, thirdProperty: 第三个属性
*/InitOrderDemo(456)
/*第一个属性: 456执行第一个初始化块, mainProperty: 次构造函数执行第一个初始化块, firstProperty: 第一个属性: 456执行第一个初始化块, secondProperty: 456执行第一个初始化块, mainProperty: 次构造函数执行第二个初始化块, firstProperty: 第一个属性: 456执行第二个初始化块, secondProperty: 456执行第二个初始化块, thirdProperty: 第三个属性执行次构造函数, mainProperty: 次构造函数执行次构造函数, firstProperty: 第一个属性: 456执行次构造函数, secondProperty: 456执行次构造函数, thirdProperty: 构造函数赋值
*/
}

 

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

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

相关文章

分布式事务是什么

分布式事务是企业集成中的一个技术难点&#xff0c;也是每一个分布式系统架构中都会涉及到的一个东西&#xff0c;特别是在微服务架构中&#xff0c;几乎可以说是无法避免&#xff0c;本文就分布式事务来简单聊一下。 数据库事务 我们先从数据库事务说起。数据库事务可能大家…

【大数据存储与处理】开卷考试总复习笔记

实验部分 一、 HBase 的基本操作 1. HBase Shell入门 # 进入HBase Shell环境 hbase shell2. HBase创建数据库表 # 创建表命令 create user, info1, info2 # 查看所有表 list # 查看表结构 describe user3. HBase数据操作 数据插入 put user, 0001, info1:name, jack put us…

傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下: PHP # 设置基础镜像 FROM php:8.2-fpm# install dependencies RUN apt-get update && apt-get install -y \vim \libzip-dev \libpng…

【Redis】Redis 的数据类型

有五种常用数据类型&#xff1a;String、Hash、Set、List、SortedSet。以及三种特殊的数据类型&#xff1a;Bitmap、HyperLogLog、Geospatial &#xff0c;其中HyperLogLog、Bitmap的底层都是 String 数据类型&#xff0c;Geospatial 的底层是 Sorted Set 数据类型。 五种常用…

智慧医疗平台开发:在线问诊系统源码搭建详解

如今&#xff0c;在线问诊系统的出现为患者提供了更为灵活、便捷的医疗服务。我们在开发系统之前&#xff0c;应该先简单了解系统的功能以及相关的技术。 一、核心功能需求 -用户注册和登录&#xff1a;用户可以通过注册账户&#xff0c;或者使用第三方登录方式进入系统。 …

高速风筒4套硬件案子谁会成为王者----【其利天下技术】

关于高速风筒的硬件电路&#xff0c;从MCU的角度来说&#xff0c;严格意义上是可以区分为四种硬件电路的&#xff0c;当前市场上这四种硬件电路也是并行存在的。所以有朋友电话问我&#xff0c;我怎么看待这四种硬件方案的优劣势和未来的&#xff1f;今天特意根据个人视角&…

Hive01_安装部署

Hive的安装 上传安装包 解压 tar zxvf apache-hive-3.1.2-bin.tar.gz mv apache-hive-3.1.2-bin hive解决Hive与Hadoop之间guava版本差异 cd /export/software/hive/ rm -rf lib/guava-19.0.jarcp cp /export/software/hadoop/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0…

基层医疗卫生信息可视化:Flask、MySQL、Echarts的综合利用

基层医疗卫生信息可视化&#xff1a;Flask、MySQL、Echarts的综合利用 正文&#xff1a; 社区卫生健康数据可视化是提升医疗服务水平和促进健康管理的有效手段。本文将介绍一种基于Flask、MySQL和Echarts技术的社区卫生健康数据可视化系统&#xff0c;数据源来自市基层医疗卫生…

Apache RocketMQ,构建云原生统一消息引擎

本文整理于 2023 年云栖大会林清山带来的主题演讲《Apache RocketMQ 云原生统一消息引擎》 演讲嘉宾&#xff1a; 林清山&#xff08;花名&#xff1a;隆基&#xff09;&#xff0c;Apache RocketMQ 联合创始人&#xff0c;阿里云资深技术专家&#xff0c;阿里云消息产品线负…

rocky linux9 安装go 即接下去

首先&#xff0c;更新系统的软件包索引以获取最新的软件包信息&#xff1a; sudo dnf update使用以下命令安装 Go 语言&#xff1a; sudo dnf install golang安装完成后&#xff0c;你可以通过以下命令验证 Go 语言是否安装成功&#xff1a; go version4、用相对路径初始化g…

适配器模式(Adapter)

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间的协作。该模式涉及一个适配器,用于在已存在的接口和需要使用的接口之间进行适配。在Java中,适配器模式主要有两种实现方式:类适配器和对象适配器。 类适配器模式 在类适配器模式中,适配器通过继…

智能优化算法应用:基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.孔雀算法4.实验参数设定5.算法结果6.参考文献7.MA…

Go语言学习一

Go语言的发展历史 Go语言的三个作者分别是&#xff1a;罗伯特格利茨默&#xff08;Robert Griesemer&#xff09;、罗伯派克 &#xff08;Rob Pike&#xff09; 和 肯汤普森&#xff08;Ken Thompson&#xff09;。 Robert Griesemer是Google V8、Chubby和HotSpot JVM的主要贡献…

Crowd Counting近期研究(附代码资源)

1.Semi-Supervised Crowd Counting with Contextual Modeling: Facilitating Holistic Understanding of Crowd Scenes paper:https://arxiv.org/abs/2310.10352 code:https://github.com/cha15yq/MRC-Crowd 摘要&#xff1a; 为了减轻训练可靠的人群计数模型所需的繁重标注…

二分查找——OJ题(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、点名1、题目讲解2、算法原理3、代码实现 二、搜索旋转排序数组中的最⼩值1、题目讲解2、算…

免费部署静态网页,国内外访问套餐 GitHub Pages、Vercel、CLOUDFLARE

部署自己的博客或者前端静态页面&#xff0c;要嘛找一些免费托管平台&#xff0c;要嘛自己买服务器和域名。买了服务器&#xff0c;还得自己配置 nginx 和域名解析等。如果希望国内外都能访问&#xff0c;服务器最好是香港的&#xff0c;域名也可以不用备案。如果只是博客&…

rime中州韵 程序配置结构讲解 保姆级教程

在完成了 Rime 引擎/框架的安装&#xff0c;并安装了基础输入方案后&#xff0c;我们就可以在这个基础上开始 DIY 了。毕竟&#xff0c;Rime 最大的优势就是可定制性强。 但是&#xff0c;在我们 DIY 前&#xff0c;我们需要先做些准备工作。磨刀不误砍柴工&#xff0c;我们需…

Javaweb见解

1 web相关的概念 1.1 软件的基本架构 C/S(Client-Server)。比如我们手机上的app QQ软件 飞秋 特点&#xff1a;必须下载特定的客户端程序。服务端升级之后&#xff0c;客户端也需要随着升级。 B/S(Broswer-Server).比如京东网站&#xff0c;腾讯qq官方网站 特点&#xff1…

一文搞清楚Java BytesToAscii和AsciiToBytes

文章目录 BytesToAsciiAsciiToBytes10进制和16进制byte对比 bytes2HexString和hexStringToBytes测试 BytesToAscii Testpublic void convertBytesToAscii() {byte[] bytes new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };String asciiString new String(bytes);System.out.pri…

你怎么看待软件测试这个工作的?转行真的甘心吗!

先说一个插曲&#xff1a;上个月我有同学在深圳被裁员了&#xff0c;和我一样都是软件测试&#xff0c;不过他是平安外包&#xff0c;所以整个组都撤了&#xff0c;他工资和我差不多都是14K。 现在IT互联网已经比较寒冬&#xff0c;特别是软件测试&#xff0c;裁员先裁测试&am…