kotlin语法总结(一)

2023-11-11

下一章地址

kotlin语法总结(二)

文章目录


前言

接下来几章将总结一下kotlin的语法,总结kotlin和java不一样的地方


(1)var可修改、val只读(类型推断)、const val a = 1(编译时常量)

(2)kotlin只提供引用数据类型,会在字节码中变成基本书记类型

(3)when(a)、in 4…6->

    val art = 10
    when (art) {
        //等于3为少儿
        in 0..3 -> println("shaoer")
        in 3..12 -> println("11")
        else -> {
            print("$art lo")
        }
    }

(4)String模板:“Answer $b”,可带变量

(5)private fun fix(age:Int):String{}

(6)具名参数 fun fix(age:Int = 2,name:String){}

(7)没有返回值,Unit函数

(8)TODO函数:抛出异常

(9)匿名函数(lambda表达式)、it关键字、类型推断

val ble:()->String = {
        val ho = "aa"
        "happy $ho"
    }
val ble = {
        val ho = "aa"
        "happy $ho"
    }
val ble = {name:String,year:Int->

}

(10)内联函数:消除lambda表达式带来的额外开销

(11)高级函数:能接收函数或者返回函数的函数

(12)闭包:匿名函数能修改和引用定义在自己作用域之外的变量

(13)java中不支持函数作为参数传递,替代方案:匿名内部类

(14)安全调用操作符:为空跳过函数调用

(15)let函数安全调用 it.isNotBlank()判空

var str1 = readLine()?.let {
        if (it.isNotBlank())
            it.capitalize()
        else
            "aaa"
    }
    //上面代码可简写成
    str1 = str1?.let { it.capitalize() }?:"aaa"

(16)非空断言操作符!!:为null抛异常

(17)空合并操作符?::左边值为空则使用右边的值,和let一起使用替代if/else

(18)异常:先决条件函数:checkNotNull require requireNotNull error assert

(19)subString:字符串截取函数

(20)List集合支持结构语法,可在一个表达式中给多个变量赋值

(21)===:比较地址、==比较值

(22)"aa s f ef g ".forEach{}

(23)安全转换函数:toIntOrNull 转换错误返回null

(24)“%.2f”.format(5.4566)、8.145.toInt()、roundToInt() 四舍五入

(25) apply函数 配置函数 返回当前接受者、let函数返回最后一行

(26)run函数返回lambda函数结果(true/false)

(27)::把一个方法当做参数传入

(28)with需要值参当做第一个参数传入

val isTooLong = with("aaaaaaaaaaa"){
        length>=0
    }

(31)集合List Set Map(只读和可变)MutableList/Set/Map listOf() +=/-= toList() IntArray数组 getOrNull getOrElse getOrPut

(32)kotlin中每一个属性,会自动产生field、getter、setter方法,可以去重写它们

(33)初始化顺序:主构造函数->初始化块->次构造函数

class Player01 (
    _name:String,
    //既是参数又是属性
    var age :Int = 20,
    var isNormal:Boolean
//    _age:Int,
//    _isNormal:Boolean

){
    var name = _name
    get() = field.capitalize()
    private set(value){
        field = value.trim()
    }
//    var age = _age
//    var nor = _isNormal

    //次构造函数
    constructor(name: String):this(name,100,false){
        this.name = name.toLowerCase()
    }

    //初始化块,在构造实例时执行
    init {
        require(age>0){"age < 0"}
        require(name.isNotBlank()){"Null"}
    }

}

fun main() {
    var player01 = Player01("a",10,true)
    var player02 = Player01("add")
    var player03 = Player01("s",isNormal = false)
    println(player02.name)
}

(34)延迟初始化两种方式:lateinit var a

class Player03(_name:String) {
    var name = _name
//    val config = loadConfig()
    val config by lazy { loadConfig() }

    private fun loadConfig() :String{
        println("load--")
        return "xxx"
    }
}

(35)初始化陷阱:执行顺序很重要

(36)开放继承 open(类和函数都要加)

open class produck(val name: String){
    fun de() = "Pr:$name"
    open fun lo() = "no"
}

//继承
class Lux:produck("aa"){
    override fun lo(): String {
        return "nn"
    }
}

(37)Any:所有类的父类

(38)智能类型转换

(39)object 单例

//object:对象声明
object AppConfig{
    init {
        println("........")
    }
    fun setSomething(){
        println("set")
    }
}
fun main() {
    //只声明一次
    AppConfig.setSomething()
    AppConfig.setSomething()
}
open class Player06{
    open fun load() = "......."
}

fun main() {
    //object:对象表达式,只用一次
    val p = object :Player06(){
        override fun load(): String {
            return "load"
        }
    }
    println(p.load())
}
open class ConfigMap{
    //伴生对象,只会初始化一次,只会有一个,用时加载
    companion object{
        private const val PATH = "xxx"

        fun load() = File(PATH).readLines()
    }
}

fun main() {
    //方法通过类名调用
    ConfigMap.load()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kotlin语法总结(一) 的相关文章

随机推荐

  • 复选框check的选中、不选中设置以及判断是否选中

    复选框的设置 一 JavaScript判断是否选中checkbox框 二 JavaScript设置选中checkbox框 三 JavaScript移除选中checkbox框 四 使用jQuery判断是否选中checkbox框 五 使用jQu
  • 国密(1) - 私钥Key文件( PEM格式)编解码方法

    详细的PEM文件格式解析 PEM文件 是按照私钥的ASN 1的格式 RFC5208 5915 5480 进行DER编码后输出二进制串的基础上 再进行Base64的编码 也就是每6个bit为一组 生成一个ascii码字符 需要4组6个bit
  • 学习笔记59—收藏这7个在线配色神器,再也不愁配色灵感了

    在设计中配色方案是必要的 也是让设计师头疼的一个问题 所以 编辑专为大家整理了一波配色神器网站 不用下载任何应用程序 打开即用 不仅能快速的做出符合设计概念的颜色组合 且有很多样品供你确认的工具 设计新手们千万别错过了 一 Khroma h
  • 【macOS】Win通过VNC远程控制Macbook

    Win通过VNC远程控制Macbook 参考 https zhuanlan zhihu com p 74162964 仅局域网内可用 Macbook配置 进入 电脑设置 勾选两个选项 Windows配置 安装VNC Viewer https
  • openpyxl操作表格的基本用法

    创建文件 以及创建xlsx表格 from openpyxl import Workbook load workbook import os 创建excel文件 默认会有一个sheet命名的表 def create xlsx path nam
  • Beginng_Rust(译):借用和生命周期(第二十二章)

    在本章中 您将学习 借用 和 生命周期 的概念 哪些是关于借用的典型编程错误 即困扰系统软件 Rust严格语法如何使用借用检查器来防止此类典型错误 插入块的方式如何限制借用范围 为什么函数返回引用需要生命周期指示符 如何使用寿命指定符来表示
  • 应用层的原理

    目录 应用层协议原理 网络应用程序体系结构 客户 服务器 P2P 混合模式 UDP TCP 所有能产生网络流量的程序 应用层协议原理 网络应用程序体系结构 客户 服务器 P2P 混合模式 UDP TCP 可供应用程序使用的运输服务 因特网提
  • 解决liquibase.exception.LockException: Could not acquire change log lock. Currently locked by XXXX

    项目启动后报liquibase exception LockException Could not acquire change log lock 解决方案 执行下面语句 use job job为你的数据库 select from DATA
  • HTML5 history新特性pushState、replaceState

    DOM中的window对象通过window history方法提供了对浏览器历史记录的读取 让你可以在用户的访问记录中前进和后退 从HTML5开始 我们可以开始操作这个历史记录堆栈 1 History 使用back forward 和go
  • windows dll 装载过程

    windows dll 装载过程 2010 12 04 19 13 56 分类 Windows系统平台上 你可以将独立的程序模块创建为较小的DLL Dynamic Linkable Library 文件 并可对它们单独编译和测试 在运行时
  • MySQL--事务+存储引擎+表类型+视图+用户管理

    目录 1 事务 1 1 概念 1 2 回退事务 1 3提交事务 1 4事务细节注意点 1 5事务的隔离级别 1 5 1 介绍 1 5 2 解决这些安全性问题 1 5 3演示脏读 1 5 4避免脏读 演示不可重复发生 1 5 5 演示不可重复
  • Hexo 博客利用 Nginx 实现中英文切换

    本文记录了对 Hexo 博客进行中英文切换的配置过程 实现同一应用共用模版 任何页面可以切换到另一语言的对应页面 并对未明确语言的访问地址 根据浏览器语言进行自动跳转 实现细则 中英文地址区分 博客中文首页 https chanvinxia
  • Filter内存马浅析

    1 何谓内存马 以Tomcat为例 内存马主要利用了Tomcat的部分组件会在内存中长期驻留的特性 只要将我们的恶意组件注入其中 就可以一直生效 直到容器重启 Java内存shell有很多种 大致分为 1 动态注册filter 2 动态注册
  • 为何pytorch nn.KLDivLoss()损失计算为负数?

    参考文献 https www zhihu com question 384982085 先来看一下KL散度的定义 这里是要用分布Q为标签 原始分布 分布P作为预测值 预测分布 在pytorch中 nn KLDivLoss 的计算公式如下 上
  • 《基于RCF边缘检测和双目视觉的箱体体积测量算法》论文阅读笔记

    原论文查看地址 https csnjiokh71 feishu cn file boxcnyF7HGMFDiWayf0vSTcYTec 1 双目畸变的原理分析 实际情况下 相机的主点 c x c y 并不位于图像中心 两者存在一定的偏差 而
  • 鹅厂内部干货

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 作者介绍 陈阳 Younger 2011年加入腾讯 现就职于腾讯游戏增值服务部 负责AMS游戏营销平台 致力于研究和推动Web及大前端相关技术的发展 一 微信小游戏 H5小游戏及微信
  • “1448万,一条命”:在生命面前,金钱显得太刺眼

    1 前段时间 美国上市了一种治疗小儿脊髓性肌肉萎缩的药 引起了非常激烈的讨论 为什么会有这么大的争议呢 因为这种药特别贵 标价210万美元 人民币约1448万元 仅仅一支药 就相当于北京三环一套房 小儿脊髓性肌肉萎缩这个病到底有多恐怖呢 得
  • 利用bat,vb实现根据日期自动备份文件

    假如D backup a为备份源文件夹 备份路径为D backup 文件夹名为当天的日期 如D backup 2006 04 17 a 每周5备份一次 3周一个循环 即备份第4周时 第1周的备份删除 以减少空间 同时在D backup lo
  • 基于单片机的电子万年历设计与制作系统(设计报告+开题中期报告+仿真文件+程序)

    摘要 本文设计实现了一种基于单片机的电子万年历设计与制作系统 该系统通过单片机的控制 实现了日期 时间和节假日等信息的显示 同时提供了闹钟 定时器和温度显示等功能 实验结果表明 该系统具有较好的稳定性和实用性 能够满足人们对万年历功能的需求
  • kotlin语法总结(一)

    下一章地址 kotlin语法总结 二 文章目录 前言 前言 接下来几章将总结一下kotlin的语法 总结kotlin和java不一样的地方 1 var可修改 val只读 类型推断 const val a 1 编译时常量 2 kotlin只提