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)  //可以通过键值对传参
}
相关推荐
VBA63376 分钟前
VBA之Word应用第三章第十节:文档Document对象的方法(三)
开发语言
老胖闲聊15 分钟前
Python Rio 【图像处理】库简介
开发语言·图像处理·python
码界奇点36 分钟前
Python Flask文件处理与异常处理实战指南
开发语言·python·自然语言处理·flask·python3.11
贩卖纯净水.1 小时前
浏览器兼容-polyfill-本地服务-优化
开发语言·前端·javascript
k要开心1 小时前
C++概念以及基础框架语法
开发语言·c++
开发者工具分享2 小时前
如何应对敏捷转型中的团队阻力
开发语言
gregmankiw2 小时前
C#调用Rust动态链接库DLL的案例
开发语言·rust·c#
roman_日积跬步-终至千里2 小时前
【Go语言基础【20】】Go的包与工程
开发语言·后端·golang
秦少游在淮海2 小时前
C++ - string 的使用 #auto #范围for #访问及遍历操作 #容量操作 #修改操作 #其他操作 #非成员函数
开发语言·c++·stl·string·范围for·auto·string 的使用
const5443 小时前
cpp自学 day2(—>运算符)
开发语言·c++