kotlin基础知识

val(value的简写)用来声明一个不可变的变量。(只读变量)

var(variable的简写)用来声明一个可变的变量。(可读写变量)

在变量声明中指定数据类型时,应在冒号后面添加一个空格。

先声明变量在声明变量的类型。 val a :Int = 10

kotlin拥有类型推导机制,变量类型可以省略不写 (val a =10),如果对变量延迟赋值,就无法自动推导类型,需要显式地声明变量。

kotlin全部使用对象数据类型,完全抛弃了java的基本数据类型,例如在java中int是关键字,在kotlin中Int是一个类。

kotlin每个语句都应单独占一行。结尾不用加分号;

Kotlin 复制代码
if语句可以有返回值,返回值是if语句每一个条件中最后一行代码的返回值
val isSuccessful = true
val responseResult = if (isSuccessful) "登录成功"else "登录失败!"

when表达式
fun getScore(name: String) = when(name) {
    "Tom" -> 86
    "Jerry" -> 7
    else -> 0
}
when语句允许类型匹配
fun checkNumber(num: Number){
    when(num){
        is Int -> println("num is Int")
        is Double -> println("num is Double")
        else -> println("num not support")
    }
}
when语句可以不传参数 kotlin判断字符串或对象是否相等可以直接使用 == 关键字
fun getScore(name: String) = when {
    name.startWith("N") -> 100
    name == "Tom" -> 86
    name == "Jerry" -> 7
    else -> 0
}
Kotlin 复制代码
..是创建两端闭区间的关键字   val range = 0 .. 10  表示[0,10],
fun main(){
    for(i in 0 .. 10){
        println(i)
    }
}


until关键字可以创建左闭右开的区间,step关键字改变循环的变化量。
fun main(){
    for(i in 0 until 10 step 2){
        println(i)
    }
}
// 0 2 4 6 8

降序区间使用downTo关键字
fun main(){
    for(i in 10 downTo 1){
        println(i)
    }
}

kotlin实例化不需要new 关键字 val p = Person()

kotlin中任何一个非抽象类默认不可被继承,在类前加open关键字可以被继承

open class Person(){ ... }

kotlin继承、实现统一使用冒号 interface Study{ ... }

Kotlin 复制代码
class Student : Person(),Study{ ... }

kotlin中public 修饰符是默认项,protected 在kotlin中表示只对当前类和子类可见,kotlin抛弃java中的default使用internal修饰符,表示只对同一模块中的类可见。

kotlin中数据类中只需要使用data关键字即可,toString()等固定方法自动生成

Kotlin 复制代码
data class Cellphone(val brand: String,val price: Double)

kotlin中将class关键字改为object关键字即可创建一个单例类,不需要私有化构造函数,可以直接在类中编写需要的函数。

Kotlin 复制代码
object Singleton{
    fun singletonTest(){
        ...
    }
}
Kotlin 复制代码
//不可变集合
val list = listOf("Apple","Pear","Grape")
//可变集合
val list = mutableListOf("Apple","Pear")
list.add("Grape")

Set集合和List集合用法一致,创建方式替换为setOf()和mutableSetOf()

val map = HashMap<String,Int>()
map["Apple"] = 1  //添加
map["Banana"] = 2
val number = map["Apple"]  //读取
//也可以使用mapOf()和mutableMapOf()直接传入
val map = mapOf("Apple" to 1,"Banana" to 2)
Kotlin 复制代码
// val d2 : Double = null //非可空类型,不能赋值为null,编译不通过
val d3 : Double? = null //可空类型,能赋值为null,编译通过

//可空类型 > 非可空类型
//为空类型:1.可以存null值。2.可以存正常值。
//非可空类型:1.只能存正常值。
var d4 : Double = 6588776.7
var d5 : Double? = nu11
// d4 = d5//编译不通过,非可空类型 不能 接收 可空类型
// d5 = d4//编译通过 可空类型 可以 接收 非可空类型
// d4 = d5 编译不通过的解决方案
if (d5 != nu11) d4 = d5

//kotlin推荐显式转换
val intValue = 666
val longValue : Long = intValue .toLong()
Kotlin 复制代码
?. 操作符表示 对象不为空时正常调用,对象为空时什么都不做
a?.doSomething()
?: 操作符左右两边接收一个表达式,如果左边结果不为空则返回左边的结果,否则返回右边的结果
val c = a ?: b
Kotlin 复制代码
kotlin支持字符串内嵌表达式
"hello, ${obj.name}.nice to meet you!"
//仅有一个变量时可以将大括号省略
"hello, $name.nice to meet you!"
Kotlin 复制代码
给函数设定参数默认值
fun printParams(num: Int = 100,str: String){
    println("num is $num, str is $str")    
}

fun main(){
    printParams(str = "world" ,num = 123)  //可以通过键值对传参
}
相关推荐
郑州光合科技余经理21 分钟前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
来了就未晚1 小时前
Python基础 学习代码存储与命名规范
开发语言·python·学习
布莱克6051 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
hongmai6668881 小时前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
多弗朗皮卡丘1 小时前
C语言梦开始的地方19:文件操作
c语言·开发语言
Dovis(誓平步青云)1 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
benchmark_cc2 小时前
Python量化实战:如何检测并剔除历史数据中的“闪崩/乌龙指”异常价格点?
开发语言·人工智能·python·量化·quantdash·量化数据源
2501_937860942 小时前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
笨笨饿2 小时前
#135_代码中的类型重定义艺术:从基础封装到函数类型设计
开发语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
统计学小王子2 小时前
R语言入门——ggplot2图例增加公式
开发语言·r语言