当前位置: 首页 > news >正文

Kotlin复习

一、Kotlin类型

1.整数

2.浮点

显示转换:

所有数字类型都支持转换为其他类型,但是转换前会检测长度。

toByte(): Byte

toShort(): Short

toInt(): Int

toLong(): Long

toFloat(): Float

toDouble(): Double

不同进制的数字表示方法(为了提高代码的可读性可维护性,Kotlin不支持八进制):

十进制: 123

十六进制: 0x0F 0x8C

二进制: 0b 0000 1011

Kotlin支持数字运算的标准集:+、 -、 *、 /、 %等。它们已定义为相应的函数:

fun main() {
println(1 + 2)
println(2_500_000_000L - 1L)
println(3.14 * 2.71)
println(10.0 / 3)
}

整数间的除法永远返回整数,除非其中一个整数显式地转换为浮点数

3.布尔

4.字符

5.字符串

6.字符串模板与格式化输出 

(1)使用美元符号

val name = "Alice"

val age = 30

val message = "Hello, my name is ${name} and I am ${age} years old.“

print(message)

(2)使用百分号格式化字符串输出

val number = 123.456

println("Formatted number:%.2f".format(number))

(3)使用String.format()函数

val name = "Bob"

val age = 25

val formattedString = String.format("Name: %s, Age: %d", name, age)

7.数组Array

Kotlin 中的数组是一种用于存储相同类型元素的集合。它允许按顺序存储元素,并通过索引来访问这些元素。Kotlin 提供了两种类型的数组:原生数组和 Kotlin 数组。

(1)Kotlin数组,使用arrayOf创建

val array = arrayOf(1,2,3,4,5) // 创建一个包含整数的Kotlin数组

(2)原生数组,不同类型使用不同的创建方法

val intArray = IntArray(5) // 创建一个包含5个整数的原生数组,默认初始值为0

8.集合

由于数组存在上述限制,因此一般仅在需要自定义数据结构时,或对访问性能有要求时才会使用数组。其余情况下,Kotlin中推荐使用“集合”:List Set Map

List(列表):List 是一种有序集合,允许包含重复元素。Kotlin 中的 List 接口有多个实现类,如 ArrayList、LinkedList 等。

Set(集):Set 是一种不包含重复元素的集合,元素之间没有明确的顺序。Kotlin 中的 Set 接口有多个实现类,如 HashSet、LinkedHashSet、SortedSet 等。

Map(映射):Map 是一种键值对的集合,每个键都唯一对应一个值。Kotlin 中的 Map 接口有多个实现类,如 HashMap、LinkedHashMap、TreeMap 等。

集合的创建方式:

(1)有初始值

val list = listOf(1,2,3,4,5) // 创建一个不可变的List

val mutableList = mutableListOf(1,2,3,4,5)  // 创建一个可变的List

val set = setOf(1,1,1,2,3) // 创建一个不可变的Set

val mutableSet = mutableSetOf(1,2,3,4,5) // 创建一个可变的Set

val map = mapOf(1 to "one",2 to "two",3 to "three") // 创建一个不可变的Map

val mutableMap = mutableMapOf(1 to "one",2 to "two",3 to "three") // 创建一个可变的Map

(2)使用构造函数

val list  = ArrayList<Int>() // 创建一个空的ArrayList

val set = HashSet<String>() // 创建一个空的HashSet

val map = HashMap<Int,String>() // 创建一个空的HashMap

添加元素:

list.add(1)

set.add("hello")

map[1] = "one"

9.检测与转换

(1)is操作符

(2)as操作符

二、Kotlin控制流程

1. if 表达式

2.When表达式

3.For循环

4.While循环

5.异常

三、Kotlin类与对象

1.类

2.构造函数

Kotlin中的构造函数用法与Java类似,但是在结构上有较大的不同。

(1)主构造函数与初始化块

(2)次构造函数

3.继承

在 Kotlin 中所有类都有一个共同的超类 Any,对于没有超类型声明的类它是默认超类:

class Example // 从 Any 隐式继承

Any 有三个方法:equals()、 hashCode() 与 toString()

因此,为所有 Kotlin 类都定义了这些方法。默认情况下,Kotlin 类是最终(final)的——它们不能被继承。 要使一个类可继承,需用 open 关键字标记它:

open class Base // 该类开放继承

如需声明一个显式的超类型,需把超类型放到冒号之后:

open class Base(p: Int)

class Derived(p: Int) : Base(p)

继承与构造函数

方法与属性的覆盖

四、Kotlin协程

1.Kotlin 中的协程(Coroutines)是一种轻量级的线程模型,用于简化异步编程。它们提供了一种在代码中以顺序、可读的方式表达并发性的方法,而无需使用传统的回调函数或显式的线程管理。 

主线程安全:在安卓开发中,需要确保 UI 操作只在主线程(UI 线程)中执行。协程提供了与主线程进行交互的便捷方式,使得可以异步执行耗时操作(文件处理、网络通信),并在必要时切换到主线程更新 UI。

简化异步编程: 使用协程可以使异步编程变得更简洁、易读和易维护。相比于传统的回调函数或者使用异步任务(AsyncTask)等方式,协程提供了更加顺序、自然的编码方式,避免了回调地狱(callback hell)的问题。同时协程相较于线程更加轻量和灵活。

进程、线程和协程三者之间的关系如图所示

2.基本概念

(1)协程作用域(Coroutine Scope):协程的生命周期。

协程作用域定义了协程的生命周期和执行范围。常见的协程作用域如下:

a.全局作用域(Global Scope):该协程的生命周期与整个应用程序的生命周期相同。对应类:GlobalScope。例如,我们在全局作用域的协程内编写了一个无限循环代码,则该代码只有在应用程序退出后才会结束。或者手动调用了该协程的取消函数。

b.局部作用域(Local Scope):该协程的应用周期和应用程序中的某个模块或对象的生命周期相同。对应类:lifecycleScope,viewModelScope。例如,如果在某个activity中开辟了一个协程,则该协程的生命周期与该activity相同,那么当我们在这个协程中进行网络请求,如果activity被销毁,则该网络请求会被立即终止。

(2)协程上下文(Coroutine Context):协程的执行环境,例如调度器。

协程上下文确定了协程的运行环境。几个关键元素如下:

a.调度器(Dispatcher):决定了协程运行在哪个线程上。例如 Dispatchers.Main 会将协程调度到主线程用于UI更新;Dispatchers.IO 会将协程调度到 IO 线程池,用于磁盘和网络IO操作。

b.作业(Job):用于管理协程的生命周期,可以取消或等待协程执行完毕。

c.异常处理器(Exception Handler):用于捕获协程中抛出的未捕获的异常,并进行处理。

d.协程名称(Coroutine Name):用于标识协程的名称,便于调试和日志记录。

(3)协程构建器(Coroutine Builder):用于启动协程。

协程构建器确定了协程的启动方式。最常见的两种启动方式如下:

a. launch :在 CoroutineScope 中启动一个新的协程,但不会阻塞当前线程。launch 返回一个 Job 实例,可以用于管理协程的生命周期(如取消协程)。适用于不需要从协程中返回结果的并发任务。

b. async:async 旨在执行需要返回结果的并发操作。它返回一个 Deferred 对象,该对象是 Job 的子类,可以用来获取协程的结果。适用于需要从协程中返回结果的并发任务。

相关文章:

Kotlin复习

一、Kotlin类型 1.整数 2.浮点 显示转换&#xff1a; 所有数字类型都支持转换为其他类型&#xff0c;但是转换前会检测长度。 toByte(): Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float toDouble(): Double 不同进制的数字表示方法&#xff08;为了提高…...

【AI日记】24.12.17 kaggle 比赛 2-6 | 把做饭看成一种游戏 | 咖喱牛肉

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset时间&#xff1a;9 小时睡得好很重要 读书 书名&#xff1a;富兰克林自传时间&#xff1a;0.5 小时阅读原因&#xff1a;100 美元纸…...

操作系统(14)请求分页

前言 操作系统中的请求分页&#xff0c;也称为页式虚拟存储管理&#xff0c;是建立在基本分页基础上&#xff0c;为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能的一种内存管理技术。 一、基本概念 分页&#xff1a;将进程的逻辑地址空间分成若干个大小相等的页&am…...

uniapp navigateTo、redirectTo、reLaunch等页面路由跳转方法的区别

uni.switchTab 跳转到 tabBar 页面&#xff0c;并关闭其他所有非 tabBar 页面 // app.json {"tabBar": {"list": [{"pagePath": "index","text": "首页"},{"pagePath": "other","text&…...

模型 A/B测试(科学验证)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。控制变量法。 1 A/B测试的应用 1.1 Electronic Arts&#xff08;EA&#xff09;《模拟城市》5游戏网站A/B测试 定义目标&#xff1a; Electronic Arts&#xff08;EA&#xff09;在发布新版《模拟城…...

谷歌发布升级版AI视频生成器Veo 2与图像生成器Imagen 3

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

快速掌握源码部署Filebeat

文章目录 1. 裸金属安装1.1 压缩包方式安装1.2 yum方式安装 2. docker安装3. K8s安装 项目使用了Filebeat&#xff0c;现在需要运行在ARM架构的服务器上&#xff0c;但是Filebeat官方没有提供&#xff0c;需要自己编译一份 filebeat等组件的源码地址 https://github.com/elasti…...

C++ 哈希表封装unordered_map 和 unordered_set

1.源码框架 SGI-STL30版本源代码中没有unordered_map和unordered_set&#xff0c;SGI-STL30版本是C11之前的STL 版本&#xff0c;这两个容器是C11之后才更新的。但是SGI-STL30实现了哈希表&#xff0c;只容器的名字是hash_map 和hash_set&#xff0c;他是作为⾮标准的容器出现…...

pymysql 入门

发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 1. 什么是 PyMySQL&#xff1f; PyMySQL 是一个纯 Python 编写的 MySQL 客户端库&#xff0c;可以通过它轻松地在 Python 中连…...

Leecode刷题C++之形成目标字符串需要的最少字符串数①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…...

Linux应用开发————mysql数据库

数据库概述 什么是数据库(database)? 数据库是一种数据管理的管理软件&#xff0c;它的作用是为了有效管理数据&#xff0c;形成一个尽可能无几余的数据集合&#xff0c;并能提供接口&#xff0c;方便用户使用。 数据库能用来干什么? 顾名思义&#xff0c;仓库就是用来保存东…...

4_使用 HTML5 Canvas API (3) --[HTML5 API 学习之旅]

4_使用 HTML5 Canvas API (3) --[HTML5 API 学习之旅] 1.缩放 canvas 对象 在 <canvas> 中缩放对象可以通过 scale 方法来实现。这个方法会根据提供的参数对之后绘制的所有内容进行缩放。下面是两个具体的示例&#xff0c;展示如何使用 scale 方法来缩放 canvas 上的对…...

docker build次数过多,导致磁盘内存不足:ERROR: no space left on device

在使用 docker build 构建镜像时&#xff0c;Docker 会创建一个临时的构建上下文&#xff0c;生成镜像的过程中会产生多个中间层。这些文件和层会占用磁盘空间。构建完成后&#xff0c;如果你没有清理这些不再使用的中间层和临时文件&#xff0c;可能会导致磁盘空间不足。 常见…...

LDO和DC-DC的区别、DCDC和LDO主要指标

LDO和DC-DC的区别 LDO外围器件少&#xff0c;电路简单&#xff0c;成本低&#xff1b;DC-DC外围器件多&#xff0c;电路复杂&#xff0c;成本高&#xff1b; LDO负载响应快&#xff0c;输出纹波小&#xff1b;DC-DC负载响应比LDO慢&#xff0c;输出纹波大&#xff1b; LDO效…...

LeetCode hot100-81

https://leetcode.cn/problems/climbing-stairs/description/?envTypestudy-plan-v2&envIdtop-100-liked 70. 爬楼梯 已解答 简单 相关标签 相关企业 提示 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&…...

RTMP、RTSP、RTP、HLS、MPEG-DASH协议的简介,以及应用场景

​实时视频传输协议 1. RTMP&#xff08;Real Time Messaging Protocol&#xff09; 简介&#xff1a;RTMP是由Adobe公司开发的实时消息传输协议&#xff0c;主要用于流媒体数据的传输。它基于TCP传输&#xff0c;具有低延迟、高可靠性的特点。特点&#xff1a;RTMP支持多种视…...

力扣-图论-15【算法学习day.65】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

“AI智慧数字孪生系统:开启智能新纪元

嘿&#xff0c;大家好&#xff01;今天我想和大家聊聊一个特别酷炫的话题——AI智慧数字孪生系统。这可是个新鲜玩意儿&#xff0c;可能有些朋友还不太了解&#xff0c;别急&#xff0c;我来慢慢道来。 首先&#xff0c;啥叫数字孪生呢&#xff1f;简单来说&#xff0c;就是给现…...

54、库卡机器人轴的软限位设置

步骤1&#xff1a;将用户组改为“专家”。 步骤2&#xff1a;点击“投入运行”----“售后服务”-----“软件限位开关” 步骤3&#xff1a;就可以针对每个轴修改对应的角度值&#xff0c;然后点击“保存”。...

基于MATLAB 的数字图像处理技术总结

大家好&#xff01;欢迎来到本次的总结性的一篇文章&#xff0c;因为咸鱼哥这几个月是真的有点小忙&#xff08;参加了点小比赛&#xff0c;准备考试等等&#xff09;所以&#xff0c;在数字图像学习后&#xff0c;我来写一个总结性的文章&#xff0c;同时帮助大家学习&#xf…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...

Web APIS Day01

1.声明变量const优先 那为什么一开始前面就不能用const呢&#xff0c;接下来看几个例子&#xff1a; 下面这张为什么可以用const呢&#xff1f;因为复杂数据的引用地址没变&#xff0c;数组还是数组&#xff0c;只是添加了个元素&#xff0c;本质没变&#xff0c;所以可以用con…...

AI书签管理工具开发全记录(十八):书签导入导出

文章目录 AI书签管理工具开发全记录&#xff08;十八&#xff09;&#xff1a;书签导入导出1.前言 &#x1f4dd;2.书签结构分析 &#x1f4d6;3.书签示例 &#x1f4d1;4.书签文件结构定义描述 &#x1f523;4.1. ​整体文档结构​​4.2. ​核心元素类型​​4.3. ​层级关系4.…...

自然语言处理——语言模型

语言模型 n元文法参数估计数据平滑方法加1法 神经网络模型提出原因前馈神经网络&#xff08;FNN&#xff09;循环神经网络 n元文法 大规模语料库的出现为自然语言统计处理方法的实现提供了可能&#xff0c;统计方法的成功应用推动了语料库语言学的发展。 语句 &#x1d460; …...

数据库管理与高可用-MySQL高可用

目录 #1.1什么是MySQL高可用 1.1.1MySQL主主复制keepalivedhaproxy的高可用 1.1.2优势 #2.1MySQL主主复制keepalivedhaproxy的实验案例 1.1什么是MySQL高可用 MySQL 高可用是指通过技术手段确保 MySQL 数据库在面临硬件故障、软件错误、网络中断、人为误操作等异常情况时&…...

itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程

我们先来看看今天的主题&#xff0c;tvbox手机版&#xff0c;然后再看看如何搭建&#xff1a; 很多爱好者都希望搭建自己的影视平台&#xff0c;那该如何搭建呢&#xff1f; 后端开发环境&#xff1a; 1.易如意后台管理优化版源码&#xff1b; 2.宝塔面板&#xff1b; 3.ph…...