kotlin 学习笔记

java写一个多人线上聊天室 课程作业谔谔 阅读详情

kotlin
一、Kotlin之变量用法


    1.kotlin变量的声明方式与Java中声明变量有很大的区别,而且必须使用var或val关键字。其中:

        var: 用此关键字声明的变量表示可变变量,即可读且可写。相当于Java中普通变量
        val: 用此关键字声明的变量表示不可变变量,即可读且不可写。相当于Java中用final修饰的变量
        基础用法
        定义格式: 关键字 变量名: 数据类型 = xxx
            变量
                //立即初始化
                var var_a: Int = 10

                //推导出类型
                var var_b = 5

                //没有初始化的时候,必须声明类型
                var var_c: Float
                var_c = 12.3f
            
            常量
                //立即初始化
                val val_a: Int = 100

                //推导出类型
                val val_b = 50
                
                
     2.每一行代码的结束可以省略掉分号    
     
     3.延迟初始化属性
        指当程序在第一次使用到这个变量(属性)的时候在初始化。
        使用lazy{}高阶函数,不能用于类型推断。且该函数在变量的数据类型后面,用by链接。
        必须是只读变量,即用val声明的变量。
        
二、Kotlin之常量的用法    

        Kotlin中只用val修饰还不是常量,它只能是一个不能修改的变量。那么常量怎么定义呢?
        其实很简单,在val关键字前面加上const关键字
        即:

            const val NUM_A = 6
            其特点:const只能修饰val,不能修饰var
        声明常量的三种正确方式

        在顶层声明
        在object修饰的类中声明,在kotlin中称为对象声明,它相当于Java中一种形式的单例类
        在伴生对象中声明
        
        // 1. 顶层声明
        const val NUM_A : String = "顶层声明"

        // 2. 在object修饰的类中
        object TestConst{
            const val NUM_B = "object修饰的类中"
        }

        // 3. 伴生对象中
        class TestClass{
            companion object {
                const val NUM_C = "伴生对象中声明"
            }
        }
三、Kotlin之注释

    Kotlin中的注释几乎和Java没什么区别。唯一的区别在于Kotlin中的多行注释中可以嵌套多行注释,
    而Java中是不能的。

        单行注释  两个斜杠开头表示单行注释(//)
        多行注释(块注释) 以斜杠加星号开头(/*),同时以星号加斜杠结尾(*/),

 

四、数值类型


    1、Kotlin中的数字的内置类型(接近与Java),其关键字为:

        Byte=> 字节 => 8位
        Short => 短整型 => 16位
        Int => 整型 => 32位
        Long => 长整型 => 64位
        Float => 浮点型 => 32位
        Double => 双精度浮点型 => 64位
        eg:
        var a: Byte = 2
        var b: Short = 2
        var c: Int = 2
        var d: Long = 2L         //长整型由大写字母L标记
        var e: Float = 2f        //单精度浮点型由小写字母f或大写字符F标记
        var f: Double = 2.0
        
        2、进制数

        二进制数
        八进制数(Kotlin不支持)
        十进制数
        十六进制数
        例:

        var g = 0x0F            //十六进制数
        var h = 0b00001011      //二进制数
        var k = 123             //十进制数
        // ps:Kotlin不支持八进制数
        
        3、数字类型字面常量的下划线

        作用:分割数字进行分组,使数字常量更易读
            val oneMillion = 1_000_000
            val creditCardNumber = 1234_5678_9012_3456L
            val socialSecurityNumber = 999_99_9999L
            val hexBytes = 0xFF_EC_DE_5E
            val bytes = 0b11010010_01101001_10010100_10010010

            println("oneMillion => $oneMillion")
            println("creditCardNumber => $creditCardNumber")
            println("socialSecurityNumber => $socialSecurityNumber")
            println("hexBytes => $hexBytes")
            println("bytes => $bytes")
            输出结果为:

            oneMillion => 1000000
            creditCardNumber => 1234567890123456
            socialSecurityNumber => 999999999
            hexBytes => 4293713502
            bytes => 3530134674
            
        4、装箱与拆箱

            装箱与拆箱
            在Kotlin中,存在数字的装箱,但是不存在拆箱。因为Kotlin是没有基本数据类型的,Kotlin是万般皆对象的原则。
            故不存在和Java中的类似int是数据类型,Integer是整型的引用类型。
            
            两个数值的比较
            判断两个数值是否相等(==),判断两个数值在内存中的地址是否相等(===),
            其实上面的装箱操作之后其内存中的地址根据其数据类型的数值范围而定
            
            val numValue: Int = 128    
            val numValueBox: Int? = numValue

            /*
                比较两个数字
             */
            var result: Boolean
            result = numValue == numValueBox
            println("numValue == numValueBox => $result")  // => true,其值是相等的

            result = numValue === numValueBox
            /*
              上面定义的变量是Int类型,大于127其内存地址不同,反之则相同。
              这是`kotlin`的缓存策略导致的,而缓存的范围是` -128 ~ 127 `。
              故,下面的打印为false
            */
            println("numValue === numValueBox => $result")  
            输出结果为:

            numValue == numValueBox => true
            numValue === numValueBox => false
            
五 布尔类型(Boolean)
    1、关键字

        Boolean关键字表示布尔类型,并且其值有true和false

    2、逻辑操作符(与Java相同)

        ' || ' => 逻辑或(或者)
        ' && ' => 逻辑与(并且)
        ' ! ' => 逻辑非(取反)
六 字符型(Char)
    1、关键字

    Char为表示字符型,字符变量用单引号(‘ ’)表示。并且不能直接视为数字,不过可以显式转换为数字。
        
    2、显示转换为其他类型
    字符型的变量不仅可以转换为数字,同时也可转换为其他类型
    例:

    var var1 = char1.toByte()
    var var2 = char1.toInt()
    var var3 = char1.toString()
    var var4 = char1.toFloat()
    var var5 = char1.toShort()
四、字符串类型(String)
    1、关键字

        String表示字符串类型。其是不可变的。所以字符串的元素可以通过索引操作的字符:str[index]来访问。可以使用for循环迭代字符串:
        其中str[index]中的str为要目标字符串,index为索引    
    2、 字符串字面量

    在Kotlin中, 字符串字面量有两种类型:

    包含转义字符的字符串 转义包括(\t、\n等),不包含转义字符串的也同属此类型
    包含任意字符的字符串 由三重引号(""" .... """)表示
    
    可以使用trimMargin()函数删除前导空格 ,默认使用符号(|)作为距前缀,当然也可以使用其他字符。例:右尖括号(>)、左尖括号(<)等。
    
    3、字符串模板

        使用字符串模板的符号为($)。在$符号后面加上变量名或大括号中的表达式
        例:

        val text1: String = "我来了!"
        var text2: String = "$text1 kotlin"
        var text3: String = "$text2 ${text1.length} 哈哈!!!!"
        
五、数组型(Array)
    Kotlin中数组由Array<T>表示,可以去看看源码实现,里面就几个方法
        创建数组的3个函数
            arrayOf()  创建一个数组,参数是一个可变参数的泛型对象
            arrayOfNulls() 用于创建一个指定数据类型且可以为空元素的给定元素个数的数组
            工厂函数(Array())
    
    4、原始类型数组

        Kotlin还有专门的类来表示原始类型的数组,没有装箱开销,它们分别是:
        ByteArray => 表示字节型数组
        ShortArray => 表示短整型数组
        IntArray => 表示整型数组
        LongArray => 表示长整型数组
        BooleanArray => 表示布尔型数组
        CharArray => 表示字符型数组
        FloatArray => 表示浮点型数组
        DoubleArray => 表示双精度浮点型数组
   

二、for语句
        Kotlin废除了Java中的for(初始值;条件;增减步长)这个规则。但是Kotlin中对于for循环语句新增了其他的规则,来满足刚提到的规则。
        for循环提供迭代器用来遍历任何东西
        for循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象
        1、新增的规则,去满足for(初始值;条件;增减步长)这个规则

        1.1、递增

        关键字:until
        范围:until[n,m) => 即大于等于n,小于m
        
        1.2、递减

        关键字:downTo
        范围:downTo[n,m] => 即小于等于n,大于等于m ,n > m
        
        1.3、符号(' .. ') 表示递增的循环的另外一种操作

        使用符号( '..').
        范围:..[n,m]=> 即大于等于n,小于等于m
        和until的区别,一是简便性。二是范围的不同。
        
        1.4、设置步长

        关键字:step
        
        2、迭代

        for循环提供一个迭代器用来遍历任何东西。
        for循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象
        2.1、遍历字符串
        
        
        
        2.4、使用数组的withIndex()方法遍历

        例:

        var arrayListTwo = arrayOf(1,3,5,7,9)
        for ((index,value) in arrayListTwo.withIndex()){
            println("index => $index \t value => $value")
        }
        
        2.5、使用列表或数组的扩展函数遍历

        数组或列表有一个成员或扩展函数iterator()实现了Iterator<T>接口,且该接口提供了next()与hasNext()两个成员或扩展函数
        其一般和while循环一起使用
        
        例:

        var arrayListThree = arrayOf(2,'a',3,false,9)
        var iterator: Iterator<Any> = arrayListThree.iterator()

        while (iterator.hasNext()){
            println(iterator.next())
        }
        
三、when语句
    在Kotlin中已经废除掉了Java中的switch语句。而新增了when(exp){}语句。
    when语句不仅可以替代掉switch语句,而且比switch语句更加强大
        3.1、when语句实现switch语句功能

        例:

        when(5){
            1 -> {
                println("1")
            }
            2 -> println("2")
            3 -> println("3")
            5 -> {
                println("5")
            }
            else -> {
                println("0")
            }
        }
        3.2、和逗号结合使用,相当于switch语句中的不使用break跳转语句

        例:

        when(1){
             // 即x = 1,2,3时都输出1。
            1 , 2 , 3 -> {
                println("1")
            }
            5 -> {
                println("5")
            }
            else -> {
                println("0")
            }
            }
            
        3.4、 检查值是否存在于集合或数组中

        操作符:
        (in) 在
        (!in) 不在
        限定:只适用于数值类型
        例:

        var arrayList = arrayOf(1,2,3,4,5)
        when(1){
            in arrayList.toIntArray() -> {
                println("1 存在于 arrayList数组中")
            }
            in 0 .. 10 -> println("1 属于于 0~10 中")
            !in 5 .. 10 -> println("1 不属于 5~10 中")
            else -> {
                println("都错了 哈哈!")
            }
        }
        
        3.5、检查值是否为指定类型的值

        操作符
        是(is)
        不是(!is)
        值得注意的是,Kotlin的智能转换可以访问类型的方法和属性
        例:

        when("abc"){
            is String -> println("abc是一个字符串")
            else -> {
                println("abc不是一个字符串")
            }
        }

        // 智能转换
        var a: Int = 2
        when(a){
            !is Int -> {
                println("$a 不是一个Int类型的值")
            }
            else -> {
                a = a.shl(2)
                println("a => $a")
            }
        }

 

《Android最全面试题-Offer直通车》目录 如今Android求职是僧多粥少,竞争非常激烈,企业招聘时要求很高,本专栏汇聚android面试各种考点,各大公司Android面试题,《Android 最全面试题》将助你全方位提升,助您脱颖而出,早日拿到满意Offer。本专栏汇聚了海量优质内容,文章数量超过100 篇。凭借过硬的质量,每月新增订阅用户数以百计,如今仅需特惠价 9.9 元,限时抢购,后续将逐步恢复原价,早订阅早开启逆袭之旅。精心筹备,整理出一系列超万字精华篇章,累计数十万的 Android 面试题深度剖析。 阅读详情

相关推荐

PWM调节DCDC参数计算原理

SOC芯片的核电压、GPU电压、NPU电压、GPU电压等,都会根据性能和实际应用场景来进行电压和频率的调整。 即动态电压频率调整DVFS(Dynamic Voltage and Frequency scaling),优化性能和功耗。

电子绿洲的博客 3160

Kotlin withIndex

返回一个惰性Iterable,它将原始数组的每个元素包装成一个IndexedValue,其中包含。

qq_27494201的博客 385

提示deepseek生成完整的json用于对接外部API

通过精准的提示词设计(字段过滤、格式约束)、动态验证机制(自检与修正)和官方模板参考,可有效确保DeepSeek生成的JSON纯净无冗余。

神棍之路 2308

Kotlin 编程的小技巧

在 Android 使用 Kotlin 编写清晰的代码对于可维护性和协作是非常重要的。

chuyouyinghe的专栏 204

GEM5教程--gem5开始之旅(一)

GEM5系列教程--gem5开始之旅一、建立GEM5 GEM5模拟器是一个用于计算机系统结构研究的模块化平台,包含系统级别的结构以及处理器的微体系结构。读者若想详细的了解,请查看其官方文档GEM5文档 读者如果想要入门GEM5的话,可以参考Learning_GEM5这个网站,这里面有较为详细的教程,可以带读者从入门到精通。小编我对GEM5的入门学习也是从这个Learning_GEM5这个网站学习的...

qq_43381135的博客 3万+

热膨胀系数(CTE)的不同处理方法对于封装翘曲仿真的影响

随着技术的不断发展,芯片封装的集成度越来越高,尺寸也越来越大,随之而来的封装翘曲问题也越来越引起关注。影响芯片封装翘曲最主要的原因就是封装中不同材料热膨胀系数(CTE)的失配性,因此在进行封装翘曲仿真的过程中,如何使用材料的CTE值就变得尤为重要,会对仿真精度产生较大的影响。本文将对比不同CTE的处理方法给仿真结果带来的影响。

wangyubo1的博客 6855

Kotlin控制流

if、for、when、跳转的使用

我的博客 884

告别报错!Win10下Autodock Vina 1.2.3保姆级安装与避坑指南

本文提供了Win10系统下Autodock Vina 1.2.3的完整安装与实战指南,涵盖环境配置、分子文件预处理、对接参数优化及结果分析等关键步骤。通过详细的避坑技巧和优化方案,帮助用户高效完成分子对接任务,特别适合生物信息学研究人员和药物发现领域的初学者。

weixin_29969209的博客 402

在 Kotlin 中使用 forEach 循环时如何获取数组的当前索引?

在 Kotlin 中使用 forEach 循环时如何获取数组的当前索引

转载和创作优秀的博客 1654

国科大学习资料--数据挖掘(刘莹)--第三章习题及参考答案

国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 第 3 章分类与回归 3.1简述决策树分类的主要步骤。 答:决策树生成的过程如下: (1)对数据源进行数据预处理, 得到训练集和测试集; (2)对训练集进行训练; (3)对初始决策树进行树剪枝; (4)由所得到的决策树提取分类规则; (5)使用测试数据集进行预测,评估决策树模型; 3.2给定决策树,选项有:(1)将决策树转换成规则,然后对结果

无名何许人的博客 3091

Python趣学篇:用Pygame打造绚烂流星雨动画

这是一个基于Pygame开发的流星雨动画项目,具有以下特效:🌠多彩流星:8种不同颜色的流星随机生成,每颗都有独特的轨迹✨粒子尾迹:每个流星都带有动态的粒子拖尾效果,增强视觉冲击力🌟闪烁星空:150颗背景星星营造真实的夜空氛围🌌渐变背景:深蓝到黑色的自然渐变,模拟夜空色彩💫斜向轨迹:所有流星都以30-60度角自然斜向下运动🎨中文显示:完美支持中文字体,显示"斜向流星雨来啦!"等文字整个程序运行流畅,达到60FPS的丝滑体验,让你仿佛置身于真实的流星雨之中!

Code_流苏:在代码中寻诗意,在实践中觅真知 6058

Kotlin——初级篇(四):控制语句详解

在前面 的章节中讲解了Kotlin语言中的数据类型、变量与常量的定义。不了解请参见前面的内容: Kotlin——初级篇(三):数据类型详解。 Kotlin——初级篇(二)常量、变量、注释。 下面详细为大家讲解Kotlin中的控制语句使用。不得不说其和Java中还是有很多不一样的地方。 目录 一、if语句 在Kotlin中的if语句和Java还是还是有一定的区别的,它能在Java中更灵活,...

weixin_30260399的博客 276

AUTOSAR模式管理-EcuM多核处理及其他概念

因此,EcuM不请求状态。因此,BswM必须确保,例如,在调用EcuM_GoHalt或EcuM_GoPoll之前,必须将关机目标从其默认值更改为ECUM_STATE_SLEEP。对于ECU的关闭,BswM(位于主EcuM的同一个分区中)最终调用主核上的GoOff,该GoOff将请求分发给所有的从核。在ECU Manager模块的早期版本中,睡眠目标被特殊处理,因为在ECU中实现的睡眠模式取决于ECU的功能。在使用了外部的SBC控制相关的MCU的下电的时候,在OFF阶段最后调用SBC进入到Sleep的指令。

m0_49148264的博客 1340

Kotlin学习笔记

Kotlin学习笔记

qq_40783389的博客 318

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Kotlin学习笔记一:Kotlin基础

Kotlin基础 首先来个经典的Hello World fun main(args : Array<String>) { println("Hello World") } 关键字 fun 用来声明一个函数 参数类型写在名称后面,变量声明也一样 函数可以定义在文件的最外层,不用非放在类里 数组是一个类 使用 println 代替了 System.out.println。Kot...

苟浩的博客 612

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

kotlin学习笔记2

kotlin学习笔记2

安在野 217

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

学习笔记-Kotlin

前些年的kotlin学习笔记,工作中没有实际使用到,仅此笔记用于有需要时翻阅回忆。

linqingf的专栏 1173

Kotlin的学习笔记1

1.Kotlin学习笔记1 新建立项目kotlin,HelloWorld.kt的文件名称 1.1.运行结果 1.2函数的声明 fun 函数名称(参数) { 函数体 } 1.3 注释 // 和/**/ 和C语言一样的。 1.4 变量 var 变量名:数据类型 1.5 变量赋值 var c:Int=1 类型名 描述 占用空间 例子 By...

keny-大成的博客 134

Kotlin学习笔记、思维导图

王智博 736

kotlin学习笔记之一:基础语法

年前看boss直聘,很多安卓开发岗位需要熟练kotlin开发,为了年后找工作和以后开发效率提升,春节假期开始了kotlin的学习,主要教材是《Kotlin 实战》kotlin in action这本书,这几天有时间顺便把阅读笔记整理下,这里是前三章内容的回忆和笔记整理。 1、kotlin代码在java中访问:文件名+Kt.fun名称,文件名可以通过注解指定名称:@file:JvmNam...

weixin_34327761的博客 156

Kotlin学习笔记二:Kotlin的类型系统

Kotlin的类型系统 基本数据类型和其他基本类型 Java把基本类型和引用类型区分开,基本类型存值,引用类型存地址,还提供了基本类型的包装类型,比如:Integer等。Kotlin并不区分基本类型和引用类型,用的全是一个类型。 val i: Int = 1 val list: List<Int> = listOf(l, 2, 3) 上面的 i 在最后会编译成Java的int, 对于...

苟浩的博客 546

kotlin学习笔记

运算符: 判断一个类是不是另一个类的实例, 有智能类型转换,不用手动强制转换。方法会将传入的参数当作正则表达式, 可以使用转义字符区别。拓展函数: 给现有类添加新的方法,不能访问类的私有成员。顶层函数: 定义在代码文件顶部的函数, 相当于。: 有序集合,​​不可变, 不支持修改,没有。语句,可以有返回值,但是如果有返回值,必须有。也是可变集合,无序,不允许重复元素,无索引。: 定义常量,定义后不可更改,相当于。中的方法可以独立存在, 方法可以嵌套。,不能强制转换,不是同一个继承关系。

2301_80165178的博客 505

kotlin学习笔记(1)kotlin实体类创建以及get set方法使用

【代码】kotlin学习笔记(1)kotlin实体类创建以及get set方法使用。

yundashi168.com 1871

Kotlin进阶学习笔记01

Kotlin进阶学习笔记 从源码分析学习Kotlin,知其然、知其所以然。 通用基础语法学习Kotlin官网或快速语法学习笔记 1. Why Kotlin 之官方说辞 简洁Concise:data class、lambda、快速单例类object 安全Safe:Nullable类型区分,自动推断 //区分nullable var str:String//不同于String? str=null//编译则报错,因为String类型非空,任何可空类型需要?符号,比如String? //避免N

志威梦优快云博客 997

【Kotlin】基本语法学习笔记

Kotlin基础语法

XiaoWu0629的博客 715

Kotlin学习笔记--Kotlin之语言基础

Kotlin极简教程学习笔记--Kotlin基础(一)Kotlin简介Kotlin语言基础1.包2.变量2.1声明变量2.2变量类型推断2.3变量类型检测2.4字符串与模板表达式3流程控制语句3.1 if3.2when3.3 for循环 while 循环 Kotlin简介 Kotlin是一门静态类型编程语言,支持JVM平台、Android 平台等等支持与Android、java 完全互操作。 Ko...

fanlc的博客 579
上一篇: 微信小程序 学习笔记
下一篇: MacBook 跳到行尾、行首、Home和end快捷键
束千凡
博客等级 码龄14年 21粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值