快速入门Kotlin③类与对象
类
构造函数
主构造函数:主构造函数是类头的一部分,它跟在类名后面。主构造函数没有函数体,它可以包含初始化代码和属性声明。初始化块:init关键字修饰,它直接写在类体中。它的执行顺序与它们在类体中的出现顺序一致。
次构造函数:次要构造函数是可选的,用于提供额外的构造方式。次要构造函数必须直接或间接地调用主构造函数。
fun main() {val person = Person("Kevin", 21) //输出:Person object createdval person2 = Person2("Kevin") //输出:Person2 object created Person2 is: Kevin
}//主构造函数:主构造函数在类头中声明,它跟在类名与可选的类型参数后。
class Person(val name: String, var age: Int) {//初始化块中的代码实际上会成为主构造函数的一部分init {println("Person object created")}
}//次要构造函数:类也可以声明前缀有 constructor的次构造函数
class Person2 {private var name: String = ""private var age: Int = 0init {println("Person2 object created")}// 次构造函数constructor(name: String) {this.name = nameprintln("Person2 is: $name")}// 主构造函数constructor(name: String, age: Int) {this.name = namethis.age = age}
}
创建类的实例
创建一个类的实例,只需像普通函数一样调用构造函数。
fun main() {val person = Person("Kevin", 21) //输出:Person object createdval person2 = Person2("Kevin") //输出:Person2 object created Person2 is: Kevin
}//....
类成员
主要包括:构造函数与初始化块(本文第一小节)、函数、属性、嵌套类/内部类、对象声明部分。
属性
-
属性可以用关键字
var
声明为可变的, 也可以用关键字val
声明为只读的; -
Getter 与 Setter:1.可变属性默认提供Getter 与 Setter。只读属性不允许 setter;2.可以自定义访问器。
-
编译期常量:使用
const
修饰符将其标记为编译期常量。必须位于顶层或者是object 声明
或伴生对象的一个成员;必须以String
或原生类型值初始化;不能有自定义 getter。 -
延迟初始化属性和变量:lateinit修饰符可以用于延迟初始化属性。允许你将其初始化推迟到第一次使用时。比如:属性的值无法在构造函数中立即确定的情况下。它只适用对象的创建或计算,而不适用于基本数据类型(如Int、Boolean等)。基本数据类型的值可以在声明时直接进行初始化。延迟初始化也可以使用by lazy修饰。
//编译期常量:必须位于顶层或者是 object 声明 或伴生对象的一个成员;必须以 String 或原生类型值初始化;不能有自定义 getter
const val HELLO_KOTLIN = "Hello, Kotlin"
fun main() {val rectangle = Rectangle(3, 4)println(rectangle.area) //输出:12rectangle.printName() //输出:not init// 使用 `lateinit` 修饰符时,需要确保在首次使用之前对属性进行初始化;// 否则会抛出 `UninitializedPropertyAccessException` 异常。rectangle.initializeName()rectangle.printName() //输出:init, name is Johnrectangle.printName2() //输出:John
}class Rectangle(private val width: Int, private val height: Int) {//延迟初始化1:lateinit var,lateinit修饰符可以用于延迟初始化属性lateinit var name: String//延迟初始化2:by lazy// lazy 是 Kotlin 标准库提供的一个函数,可以用于延迟初始化属性。它接收一个 lambda 表达式作为参数,在第一次访问属性时执行 lambda 表达式,并将结果作为属性的值返回。private val name2: String by lazy {"John"}//自定义getter:如果定义了一个自定义的 getter,那么每次访问该属性时都会调用它。val area: Int get() = this.width * this.heightinit {println(HELLO_KOTLIN)}fun initializeName() {name = "Rectangle"}fun printName() {//检测一个 lateinit var 是否已经初始化过,请在该属性的引用上使用 .isInitializedif (::name.isInitialized) {println("init, name is $name")} else {println("not init")}}fun printName2() {println(name2)}
}
latei
相关文章:
快速入门Kotlin③类与对象
类 构造函数 主构造函数:主构造函数是类头的一部分,它跟在类名后面。主构造函数没有函数体,它可以包含初始化代码和属性声明。初始化块:init关键字修饰,它直接写在类体中。它的执行顺序与它们在类体中的出现顺序一致。 次构造函数:次要构造函数是可选的,用于提供额外…...
RUST:Arc (Atomic Reference Counted) 原子引用计数
在Rust编程语言中,Arc 是一个智能指针类型,全称为 "Atomic Reference Counted"(原子引用计数)。它的主要作用是提供线程安全的共享所有权机制,使得多个线程可以同时持有同一个数据结构的访问权,并…...

从0写一个问卷调查APP的第13天-1
1.今日任务 我也只是一个大学生,有什么思路不对的地方给我指出来哟! 分析:上次我们实现了任务调查的插入。但是我们插入的问卷调查只有它的标题,也就是这个问卷调查是什么我们告诉数据库了,但是现在我们还没有给它添加任何问题&…...
20.Python从入门到精通—参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
20.从入门到精通:参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数 参数位置参数关键字参数默认参数 匿名函数return 语句强制位置参数 参数 在Python中,函数可以接受任意数量的参数,包括位置参数、关键字参数和默认参数。以下是这…...
Python爬虫之requests库
1、准备工作 pip install requests 2、实例 urllib库中的urlopen方法实际上就是以GET方式请求网页,requests库中相应的方法就是get方法。 import requestsr requests.get(https://www.baidu.com/) print(type(r)) # <class requests.models.Response> 响…...
鱼塘钓鱼(多路归并)
有 N 个鱼塘排成一排,每个鱼塘中有一定数量的鱼,例如:N5 时,如下表: 鱼塘编号12345第1分钟能钓到的鱼的数量 (1…1000)101420169每钓鱼1分钟钓鱼数的减少量(1…100)24653当前鱼塘到…...

java每日一题——买啤酒(递归经典问题)
前言: 非常喜欢的一道题,经典中的经典。打好基础,daydayup!!!啤酒问题:一瓶啤酒2元,4个盖子可以换一瓶,2个空瓶可以换一瓶,请问10元可以喝几瓶 题目如下: 啤酒问题:一瓶…...
最近接到一个大项目,给公司设计抢商品代金劵业务
我们公司是做汽车金融方面的工作,在业内还挺大。目前单量来源于2,3线城市,随着大环境越老越差位了吸引他们, 公司决定给全国的客户,销售等发一些商品 1.总体学习了京东开源秒杀系统设计思路和方案。 我们公司决定进行…...
防火墙(讲解)
目录 1.防火墙是什么? 2.防火墙设备 3.防火墙功能 1)出色的控制能力,过滤掉不安全服务 2)过滤非法用户和访问特殊站点 3)它能够对网络存取和访问进行监控审计 4.防火墙的局限 (1)防火墙有可能是可以绕过的 (2)防火墙不能防止内部出卖性攻击或者内部误操作…...
Python之装饰器-带参装饰器
Python之装饰器-带参装饰器 带参装饰器 之后不是一个单独的标识符,是一个函数调用函数调用的返回值又是一个函数,此函数是一个无参装饰器带参装饰器,可以有任意个参数 func()func(1)func(1, 2) def add(x, y):"""函数说明&…...

抖音IP属地怎么更改
抖音是一个非常受欢迎的短视频平台,吸引了无数用户在上面分享自己的生活和才艺。然而,随着快手的火爆,一些用户开始担心自己的IP地址会被他人获取,引起个人隐私风险。那么,抖音用户又该如何更改到别的地方呢࿱…...

Flutter 全局控制底部导航栏和自定义导航栏的方法
1. 介绍 导航栏在移动应用中扮演着至关重要的角色,它是用户与应用之间进行导航和交互的核心组件之一。无论是简单的页面切换,还是复杂的应用导航,导航栏都能够帮助用户快速找到所需内容,提升用户体验和应用的易用性。 在移动应用…...

检索增强生成(RAG)技术:实现流程、作用及应用案例
一. RAG简介 在自然语言处理(NLP)领域中,检索增强生成(Retrieval-Augmented Generation, RAG)技术巧妙地结合了信息检索与神经网络生成模型的力量,通过在生成过程中引入相关的外部信息,实现了在…...

Ubuntu安装和使用
Ubuntu 安装和配置 修改下载源 打开软件与更新, 选择其它站点, 选择中国, 选择阿里云源 谷歌中文输入法配置 Ctrl Alt T打开终端, 执行下述命令下fcitx框架 输入密码进行安装 sudo apt-get install -y fcitx-googlepinyinWin呼出菜单, 选择语言支持, 第一次打开会显示语言…...
【Unity】Stream最好用的Selfhost开源轻量服务
【背景】 有好几种场景的投屏或者远控应用希望实现,无论用哪种方式,都绕不开如何构建服务这一关。 【分析】 外网有很多直接付费使用的信令传输类型或是提供流服务的服务器,但我的目标场景是断绝外网的局域网,而且付费也总觉得…...
Web 常见的攻击方式有哪些?
常见的 Web 攻击方式有以下几种: 跨站脚本攻击(XSS 攻击) 跨站请求伪造(XSRF 攻击) SQL 注入 XSS 攻击 MDN 定义如下: 跨站脚本攻击(Cross-site scripting,XSS)是一…...
Rancher(v2.6.3)——Rancher部署Redis(单机版)
Rancher部署Redis详细说明文档]:https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#6rancher%E9%83%A8%E7%BD%B2redis ps:如果觉得作者写的还行,能够满足您的需求&#…...

stm32-模拟数字转化器ADC
接线图: #include "stm32f10x.h" // Device header//1: 开启RCC时钟,包括ADC和GPIO的时钟//2:配置GPIO将GPIO配置为模拟输入模式//3:配置多路开关将左边的通道接入到规则组中//4:配置ADC转…...
[Repo Git] manifests的写法
manifests是个啥 在Repo中manifests描述了Repo客户端的结构,也就是可以从manifests中知道各个模块的代码应该从代码管理仓库当中哪个位置去获取。 manifests的基本结构是一个Git存储库,在顶层目录中持有一个default.xml文件。 由于m…...
位置编码与长度外推
位置编码 位置编码从前到后包括:绝对位置编码、余弦位置编码、旋转位置编码、ALiBi相对位置编码。 1 绝对位置编码(Absolute Positional Encoding) 应用的模型:BERT、GPT等Transformer基础模型广泛使用绝对位置编码来处理序列数据。 算法思想:绝对位置编码通过为序列中的…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...