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)  //可以通过键值对传参
}
相关推荐
IT猿手26 分钟前
2025最新智能优化算法:沙狐优化(Rüppell‘s Fox Optimizer,RFO)算法求解23个经典函数测试集,完整MATLAB代码
android·算法·matlab·迁移学习·优化算法·动态多目标优化·动态多目标进化算法
rit843249929 分钟前
MATLAB基于voronoi生成三维圆柱形
开发语言·人工智能·matlab
liulilittle35 分钟前
C/C++ inline-hook(x86)高级函数内联钩子
c语言·开发语言·汇编·c++·hook·底层·钩子
Amelio_Ming36 分钟前
C++开源项目—2048.cpp
linux·开发语言·c++
chilavert31840 分钟前
技术演进中的开发沉思-28 MFC系列:关于C++
开发语言·c++·mfc
witton42 分钟前
C语言使用Protobuf进行网络通信
c语言·开发语言·游戏·c·模块化·protobuf·protobuf-c
黄焖鸡能干四碗1 小时前
系统安全设计方案,软件系统安全设计方案
开发语言·数据库·安全·vue·系统安全
dragoooon341 小时前
C++——string的了解和使用
c语言·开发语言·c++·学习·学习方法
格林威2 小时前
Baumer工业相机堡盟工业相机如何通过DeepOCR模型识别判断数值和字符串的范围和相似度(C#)
开发语言·人工智能·python·数码相机·计算机视觉·c#·视觉检测
sanggou2 小时前
InterSystems IRIS安装部署
开发语言