当前位置:网站首页>kotlin语法总结(一)
kotlin语法总结(一)
2022-08-02 03:27:00 【浮空over】
下一章地址
文章目录
前言
接下来几章将总结一下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()
}
边栏推荐
- Dcat Admin 关闭代码生成器 登录指定地址
- 考(重点理解哪些属于其他货币资金)、其他货币资金的内容、其他货币资金的账务处理(银行汇票存款、银行本票存款、信用卡存款、信用证保证金存款、存出投资款、外埠存款)
- 在 UUP dump 被墙的情况下如何用 UUP 下载 ISO 镜像
- 记账凭证的种类、记账凭证的基本内容、记账凭证的填制要求、记账凭证的审核
- OPENSSL基本实验以及OPENSSL详解
- 清理c盘爆满告急,C盘清理
- 学IT,找工作——反转链表
- 敏感信息泄露
- 树莓派4b安装win11/10过程全教程(附蓝屏inaccessible boot device解决办法)
- 【泰山众筹】模式为什么一直都这么火热?是有原因的
猜你喜欢

【一句话攻略】彻底理解JS中的回调(Callback)函数

面试必备:Android性能分析与优化实战进阶手册
![WeChat applet development video loading: [Rendering layer network layer error] Failed to load media](/img/24/e12a1312aee28a43428b2ae0bfbe00.png)
WeChat applet development video loading: [Rendering layer network layer error] Failed to load media

链动2+1模式开发系统

redis未授权访问(4-unacc)

Shuriken: 1 vulnhub walkthrough

PHP反序列化漏洞

会计凭证概述、原始凭证、原始凭证的种类、原始凭证的基本内容、原始凭证的填制要求、原始凭证的审核

Eric target penetration test complete tutorial
![[Hello World教程] 使用HBuilder和Uni-app 生成一个简单的微信小程序DEMO](/img/98/7ad7fcee0deaaa92446098d1d99dc3.png)
[Hello World教程] 使用HBuilder和Uni-app 生成一个简单的微信小程序DEMO
随机推荐
(6) Design of student information management system
The CTF introductory notes of SQL injection
DNS详解
深入了解为何面试官常说:你还没准备好,我不会录用你
laravel-admin FROM表单同行展示问题
By figure, a (complete code at the end)
命令执行漏洞
CSRF (Cross Site Request Forgery)
最简单的FRP内网穿透教程
Masashi: 1 vulnhub walkthrough
redis未授权访问(4-unacc)
The CTF introduction of PHP file contains
SATA M2 SSD 无法安装系统的解决方法
php laravel框架生成二维码
文件上传漏洞
Solve the problem that the 5+APP real machine test cannot access the background (same local area network)
Kotlin - 延迟初始化和密封类
一次代码审计的笔记(CVE-2018-12613 phpmyadmin文件包含漏洞)
laravel 写api接口时 session获取不到处理办法
学IT,找工作——反转链表