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

复习 Kotlin 从小白到大牛 第二版 笔记要点

4.2.2 常量和只读变量

常量和只读变量一旦初始化就不能再被修改。在kotlin中,声明常量是在标识符的前面加上val或const val 关键字。

1. val 声明的是运行时变量,在运行时进行初始化

2.const val 声明的是编译时常量,在编译时初始化

val 相当于 final

const val 相当于 public static final

5.4.1 可空类型概念

例子:

var n:Int = 10   n=null   编译错误

var n:Int?=10 n=null  可以

Kotlin 安全运算符

1.安全调用运算符?.

2.安全转换运算符 as?.

3.Elvis 运算符?:

  也叫 空值合并运算符  例子:

var a=divide(100,0)

int x=a?:0  

结果x=0

意思就是 假如a是空值,则让x=0  相当于给他一个默认值,空的就赋值0,避免了null 报错

4.非空断言 !!

6.2.5字符串比较

val s1="Hello"

val s2="HELLO"

s1.equals(s2,ignoreCase = true)//忽略大小写比较内容是否相等  结果为true

除了equals 之外,还有compareTo ,这个比较的是顺序,返回的是数字,

如果俩个字符串相等结果为0,前面的小就返回负数,大就返回正数

7.5其他运算符

冒号: 用于变量或者常量类型声明,以及声明继承父类和实现接口

小括号():起到改变表达式运算顺序的作用,他的优先级更高

中括号【】:索引访问运算符号

等号:赋值

可空符?标识一个可空类型

安全调用运算符?.   调用非空类型的函数或者属性

Elvis ?:     空值合并运算符

非空断言 !! 就是一定不会是空值

双冒号::  引用类,属性或函数

区间.. :表示一个范围区间

箭头-> 用来声明lambda 表达式

展开运算符*将数组传递给可变参数时使用

8.1分支结构

if else

when(){

x->{

}

}

do{

}while()

8.2.3 for语句

for( a int 0..9){

}

for(a int 0..list.size){}

for(item in list){}

//获取数组索引

for(i in list.indices){}

8.4 使用区间

for(x in 0..5) //定义区间包含0和5

for(x int 0 until 5) //定义半开区间包含0,不包含5

8.4.2 使用in 和!in 关键字

例子

var testScore=80   //设置一个测试分数var grade=when(testScore){in 90..100->"优秀"in 80 until 90->"良"in 60 until 80->"中"in 0 until 60->"差"else->"无"}if(testScore !in 60..100){println("不及格")}val strList= arrayOf("刘备","关羽","关羽")var name="赵云"if(name !in strList){println(name+"没结义")}

函数

fun 函数名(参数列表) : 返回值类型{

        函数体

        return 返回值

}

9.3.1使用命名参数调用函数

xxx(100,100)//没有采用

xxx(width=100,height=100)//采用命名函数

xxx(100,height=100)//采用

这个操作,之前的java使用参数提示的,命名函数可能有其他操作吧

9.3.2参数默认值

 9.3.3可变参数

 这里可以和扩展运算符*结合

9.5 局部函数

9.6匿名函数

 fun nimingTEST(a:Int,b:Int):String{val xxx=if(a==b)fun (x1 : Int, x2:Int):String{return (x1+x2).toString() }elsefun (x1 : Int, x2:Int):String{return (x1-x2).toString() }return  xxx(a,b)}

感觉这个不如一条一条列出来清晰

10.4.1 Bean

 

 10.4.3延迟初始化属性

lateinit 字面意思延迟初始化,用的时候才会实例化,实例化是占内存,这个可以避免内存消耗吧

lateinit 关键字放在var之前,不能是可空类型

10.4.6可观察属性

 这里做了一个点击查看的操作,是可以监听到的,

10.5.1扩展函数

//基本数据类型扩展fun Double.interestBy(interestRate: Double): Double {return this * interestRate}//自定义账户类class Account {var amount: Double = 0.0 //账户金额var owner: String = ""  //账户名}//账户类函数扩展fun Account.interestBy(interestRate: Double): Double {return this.amount * interestRate}

 Double 类型可以引用

 看起来很方便

这个看起来只能在当前类中使用

肯定可以写全局的

写一个文件,注意是文件不是类

 这样直接在其他地方可以用了,需要注意是在同一个包里

10.6构造函数

 默认是自带无参数构造


10.8.1声明数据类

创建一个类,区分了是数据类还是工具类还是其他类

数据类关键词data

添加一个data关键字后变成了数据类,底层数据类

底层的三个方法

hash()  toString equals 另外增加了一个copy的方法

data 修饰的类 参数有要求,必须要有var/val修饰

 

打印出来是2,也就是 修改了其中一个值其他都是之前的

10.10嵌套类

 无法访问外部类成员变量

加一个内部类关键字就可以了

 10.11.1对象表达式

Object关键字

接口回调

 

10.11.3 伴生对象

Kotlin 没有 java中的Static 所以

伴生类不能访问外部类的成员属性啥的,这个交互起来,还是以外部类为主

11.继承与多态

关键字open,Kotlin 默认是 final修饰的类和属性只有加上open才能被继承

 都一样,哪个代码少用哪个

11.4.1 is as

is 相当于 instanceof    as 相当于强类型转换

13.2.4 函数作为参数调用

费劲巴拉的你直接宽*高不就得了。

13.3Lambda 表达式


使用案例2

 简便了为啥我感觉花里胡哨的没有java通俗易懂


 简化之后Int直接省略了

省略写法

 没啥意思啊~


13.3.4 return

 return@foreach可以跳出本次循环,return 和 break 会跳出整个循环

 这种写法就可以用continue


13.4.闭包与捕获变量

这个有点绕

 


13.5内联函数

关键字inline

13.5.2Let函数

let的特点 1  最后一行是赋值

let特点2非空检查

在koltin中防止引用null对象,所有的对象都可以调用let方法,为空时不执行,不为空时执行

 a是自己取的名字,可以使用默认的it

let特点3 直接读取调用链结果

例子

这里拿到的是他们的长度,但是我想要字符串本身

 直接拿到数据

map是转换的意思

run

with

和run类似,但是他没有返回值

 apply

        

also


 泛型

假设要做一个比较的方法

这里只能比较int 参数

在方法名之前加上<T>就行了,一般都是TEKU

如果是多类型的<T,U>,中间用逗号隔开

14.1.3泛型约束

假如只想比较数字方向的类型,可以大概给个Number,他的子类有Int Double

 也可以写成

Comparable<T>包括了很多可以比较的类型,前后的参数一定要一个类型的

14.1.4可空类型参数

假如参数是空的,我们需要防止

可空

 不可空

3大基础函数

filter

过滤

map

转换

reduce

聚合

 聚合函数

阶乘

     // n个元素val intArray = IntArray(2) {it + 1}val reduce = intArray.reduce { acc, i ->acc * i}println(reduce)

从1开始到n的阶乘


 结果是从0到999


19协程

在执行阻塞任务时.会将这种任务放到子线程中,执行完成再回调(callback)主线程,更新UI等操作,这就是异步编程。协程底层库也是异步处理阻塞任务,但是这些复杂的操作被底层库封装起来。协程代码的程序流是顺序的,不再需要一堆的回调函数,就像同步代码一样,也便于理解,调试和开发

线程是抢占式的,线程调度是操作系统级的,而协程是协作式的,协程调度是用户级的,协程是用户空间线程,与操作系统无关,所以需要用户自己去做调度

19.2创建协程


 launch 函数的返回值是一个Job对象,Job是协程要执行的任务,可以将Job对象看做协程本身,所有对协程的操作都是通过Job对象完成的,协程的状态和生命周期都是通过Job反应出来的

Job对象的常用属性和函数

isActive 判断Job是否处于活动状态

isCompleted判断Job是否处于完成状态

isCanceled判断Job是否处于取消状态

start 开始Job

cancel取消Job

join 当前协程处于等待状态,知道Job完成,join是一个挂起函数,只能在协程体中或其他的挂起函数中调用

launch 和 runBlock 是相反的,runBlock 会阻塞线程

 从这里可以看出通过.launch开启一个协程会被先挂起,同级别的代码会先运行,


 

 

suspend是一个协程的关键字,被他修饰的函数就会挂起,例如这个delay(),他只能在协程方法体内运行,当遇到了suspend函数的时候,当前的协程就会主动逃离当前的线程去别的地方执行任务,当函数比如delay 500  执行完了,他就会回来线程继续执行

suspend就是让协程该走就走,执行完在回来,给主线程或者说同级别的代码块更好的运行

这里的运行顺序换成runBlock

 和上面相反程序会等runblock 执行完再执行下面

由于这种操作有可能阻塞主线程,所以很少有


简单实用的场景

butStart.setOnClickListener(View.OnClickListener {
            val coroutineScope = CoroutineScope(Dispatchers.Main)
            coroutineScope.launch {
                withContext(Dispatchers.IO) {
                    Thread.sleep(5000)
                    a = 20
                }
                text.text = ""+a
            }
        })
可以通过withContext 把它切换到子线程,

 以后用它替换java的AsycnTask吧,至于其他方法太烦了


相关文章:

复习 Kotlin 从小白到大牛 第二版 笔记要点

4.2.2 常量和只读变量 常量和只读变量一旦初始化就不能再被修改。在kotlin中&#xff0c;声明常量是在标识符的前面加上val或const val 关键字。 1. val 声明的是运行时变量&#xff0c;在运行时进行初始化 2.const val 声明的是编译时常量&#xff0c;在编译时初始化 val …...

X264简介-Android使用(二)

X264简介-Android使用&#xff08;二&#xff09; 4、Ubuntu上安装ffmpeg&#xff1a; 检查更新本地软件包&#xff08;如果未更新&#xff0c;reboot Vmware&#xff09;&#xff1a; sudo apt update sudo apt upgrade官网下载的source文件安装&#xff1a; http://ffmpe…...

【独家】华为OD机试 - 统计差异值大于相似值二元组个数(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

掌握好Framework 才是王道~

现在面试对Android开发者的要求越来越高了&#xff01;从最开始的阿里、头条、腾讯等大厂&#xff0c;到现在的互联网车企&#xff0c;面试总喜欢问道 Framework底层原理的相关问题 Android Framework的三大核心功能&#xff1a; 1、View.java:View工作原理&#xff0c;实现包…...

Codeforces Round 856 (Div. 2) A — C

Codeforces Round 856 (Div. 2) 文章目录A. Prefix and Suffix Array题目大意题目分析codeB. Not Dividing题目大意题目分析codeC. Scoring Subsequences题目大意题目分析codeA. Prefix and Suffix Array 题目大意 给出一个字符串所有的非空前后缀&#xff0c;判断原字符串是…...

2022年MathorCup数学建模B题无人仓的搬运机器人调度问题解题全过程文档加程序

2022年第十二届MathorCup高校数学建模 B题 无人仓的搬运机器人调度问题 原题再现 本题考虑在无人仓内的仓库管理问题之一&#xff0c;搬运机器人 AGV 的调度问题。更多的背景介绍请参看附件-背景介绍。对于无人仓来说&#xff0c;仓库的地图模型可以简化为图的数据结构。 仓库…...

开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾

作者&#xff1a;孙健波、曾庆国 点击查看&#xff1a;「开源人说」第五期《KubeVela&#xff1a;一场向应用交付标准的冲锋》 2023 年 2 月&#xff0c;**KubeVela [ 1] ** 经过全体 ToC 投票成功进入 CNCF Incubation&#xff0c;是云原生领域首个晋级孵化的面向应用的交付…...

MSDP实验配置

目录 配置MSDP 配置PIM SM协议 配置各PIM SM域内的静态RP 配置MSDP对等体 配置域内的MSDP对等体 AR8和AR9建立EBGP邻居 配置域间的MSDP对等体 进行实验验证 什么是MSDP MSDP&#xff08;Multicast Source Discovery Protocol&#xff09;组播源发现协议的简称 用来传递…...

惊!初中生也来卷了……

大家好&#xff0c;我是良许。 前两天在抖音直播的时候&#xff0c;突然来了一位不速之客…… 他自称是初中生&#xff0c;一开始我还有点不太相信&#xff0c;直到跟他连麦&#xff0c;听到他还略带一些稚嫩的声音&#xff0c;我才知道&#xff0c;他没有骗我…… 他说他想学…...

kafka相关配置介绍

kafka默认配置 每个kafka broker中配置文件server.properties默认必须配置的属性如下&#xff1a; broker.id0 num.network.threads2 num.io.threads8 socket.send.buffer.bytes1048576 socket.receive.buffer.bytes1048576 socket.request.max.bytes104857600 log.dirs/tmp/…...

【PyTorch】教程:torch.nn.Hardtanh

torch.nn.Hardtanh 原型 CLASS torch.nn.Hardtanh(min_val- 1.0, max_val1.0, inplaceFalse, min_valueNone, max_valueNone) 参数 min_val ([float]) – 线性区域的最小值&#xff0c;默认为 -1max_val ([float]) – 线性区域的最大值&#xff0c;默认为 1inplace ([bool]) …...

神垕古镇景区5A级十年都没有实现的三大主因

钧 瓷 内 参 第40期&#xff08;总第371期&#xff09; 2023年3月5日 神垕古镇景区5A级十年都没有实现的三大主因 这是2013年&#xff0c;禹州市市政府第一次提出创建5A级景区到今年三月份整整十年啊&#xff01; 目前神垕古镇景区是4A级景区&#xff0c;5A级一直进行中&a…...

react函数组件常用的几个钩子函数useState、useEffect、useRef、useCallback

react框架react框架包括包括两大类&#xff1a;类组件函数组件。类组件构成&#xff1a;constructor自定义方法。调用方法通过this.方法名()。constructor(superstate)构造器里面必有super字段。render()方法里面写页面布局。函数组件构成&#xff1a;各种钩子函数return()方法…...

4N60-ASEMI高压MOS管4N60

编辑-Z 4N60在TO-220封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为2.5Ω&#xff0c;是一款N沟道高压MOS管。4N60的最大脉冲正向电流ISM为16A&#xff0c;零栅极电压漏极电流(IDSS)为1uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。4N60功耗&#xff08;…...

现代神经网络(VGG),并用VGG16进行实战CIFAR10分类

专栏&#xff1a;神经网络复现目录 本章介绍的是现代神经网络的结构和复现&#xff0c;包括深度卷积神经网络&#xff08;AlexNet&#xff09;&#xff0c;VGG&#xff0c;NiN&#xff0c;GoogleNet&#xff0c;残差网络&#xff08;ResNet&#xff09;&#xff0c;稠密连接网络…...

Java代码弱点与修复之——Dereference null return value(间接引用空返回值)

弱点描述 Dereference null return value,间接引用空返回值。是Coverity Scan静态代码分析工具中的一个警告,表示代码中有对可能为空(null)的方法或函数返回值进行间接引用(Dereference)操作。 该类型的漏洞可能会导致 NullPointerException 异常,并且会导致程序崩溃或…...

【冲刺蓝桥杯的最后30天】day3

大家好&#x1f603;&#xff0c;我是想要慢慢变得优秀的向阳&#x1f31e;同学&#x1f468;‍&#x1f4bb;&#xff0c;断更了整整一年&#xff0c;又开始恢复CSDN更新&#xff0c;从今天开始更新备战蓝桥30天系列&#xff0c;一共30天&#xff0c;如果对你有帮助或者正在备…...

光伏发电嵌入式ARM工控机

随着智慧电力技术的不断发展和普及&#xff0c;越来越多的电力设备和系统需要采用先进的控制和监测技术来实现自动化管理和优化运行。其中&#xff0c;嵌入式 ARM 控制器技术在智慧电力领域中得到了广泛应用。同时&#xff0c;导轨安装也是该技术的重要应用场景之一。 导轨安装…...

推荐 7 个 Vue.js 插件,也许你的项目用的上(五)

当我们可以通过使用库轻松实现相同的结果时&#xff0c;为什么还要编写自定义功能&#xff1f;开发人员最好的朋友和救星就是这些第三方库。我相信一个好的项目会利用一些可用的最佳库。Vue.js 是创建用户界面的最佳 JavaScript 框架之一。这篇文章是关于 Vue.js 的优秀库系列的…...

1.1基于知识图谱的项目实战:优酷搜索泛查询意图优化

NLU的技术实现主要分为在线识别和离线数据挖掘两块。 1.在线识别 NLU的在线识别技术栈如下图所示,共由下述2个部分组成: 第一个部分是Slot Filling(成分分析),负责对query进行实体识别和槽位抽取;第二部分Inention Detection(意图识别),根据提取的槽位进行意图的判定(目…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...