【编程语言】Kotlin笔记

基础语法

变量

val(value简写)声明一个不可变变量。

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

显式声明变量类型:

val a: Int = 10

JAVA和Kotlin数据类型对应关系

JAVA Kotlin
int Int
long Long
short Short
float Float
double Double
boolean Boolean
char Char
byte Byte

函数

fun 函数名(变量名:数据类型....:数据类型(返回值)
{
    
    
    
}

逻辑控制语句

if语句 可作为返回值

if(条件)
{
    
    
    
}
else
{
    
    
    
}
//精简写法
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

when语句

fun getScore(name: String) = when (name) {
    
    
    "Tom" -> 86
    "Jim" -> 77
    "Jack" -> 95
    "Lily" -> 100
    else -> 0
}
匹配值 -> {
    
     执行逻辑 }
//类型匹配
fun checkNumber(num: Number) {
    
    
    when (num) {
    
    
        is Int -> println("number is Int")
        is Double -> println("number is Double")
        else -> println("number not support")
    }
}

while语句

while(执行条件)
{
    
    
    
}

for循环

for(i in collection)
{
    
    
    
}
//默认遍历步长为一,若修改遍历步长:
fun main() {
    
    
    for (i in 0 until 10 step 2) {
    
    
        println(i)
    }
}

downto 关键字

//降序遍历
fun main() {
    
    
    for (i in 10 downTo 1) {
    
    
        println(i)
    }
}

class 类名{
    
    }
//实例化
val p = 类名()
//继承
open class 类名{
    
    } //表示该类可以被继承
class Student:Person(){
    
    } 

主构造函数

  • 就是默认的无参构造,没有函数体。可以通过init结构体来对其进行一些操作。
init
{
    
    
    println(".....")
}

次构造函数

  • 次构造函数通过constructor关键字定义
class Student(val sno:String,val grade:Int,name:String,age:Int):Person(name,age)
{
    
    
    constructor(name:String,age:Int):this("",0,name,age){
    
     }
    constructor():this("",0){
    
    }
}

接口

//声明
interface Study
{
    
    
    fun readBooks()
    fun doHomework()
}
//实现
class Student(name:String,age:Int):Person(name,age),Study
{
    
    
    override fun readBooks() {
    
    
        println("ReadBook......")
    }

    override fun doHomework() {
    
    
        println("doHomework.....")
    }

}

数据类

在要成为数据类的前面添加data关键字即可使该类成为数据类。

data class Cellphone(val brand:String,val price:Double)

数据类的好处是kotlin会自动根据主构造函数中的参数生成equals、hashCode()、toString()等固定且无实际意义的方法自动生成。

单例类

public class Singleton {
    
    
    private static Singleton instance;

    private Singleton() {
    
    }

    public synchronized static Singleton getInstance() {
    
    
        if (instance == null) {
    
    
            instance = new Singleton();
        }
        return instance;
    }

    public void singletonTest() {
    
    
        System.out.println("singletonTest is called.");
    }
}

可空类型

类名+? 如:Int? String?

判空辅助工具

  • 对象?.函数 对象不为空正常调用方法,为空时什么都不做。
  • ?: 左边表达式的结果不为空就返回左边表达式的结果,否则就返回右边表达式的结果。
  • !! 强制通过编译,在对象后面加上!! 。

Lambda

一小段可以作为参数传递的代码。

Lambda表达式结构

{
    
    参数名1:参数类型,参数名2:参数类型->函数体} //前面为参数列表
//对于单个与只有一个参数的Lambda表达式可以简写为
 	var a = listOf(1,2,3,4,5,6)
    a = a.map {
    
     it+1 }
    for (i in a)
    {
    
    
        print("\t"+i)
    }
//输出为:
	2	3	4	5	6	7

集合创建与遍历

listOf创建的是一个不可变集合,不能调用添加或者删除方法。

//创建
val list = listOf("Apple","Banana","Orange","Pear","Grape")
//遍历
 for (i in list)
 {
    
    
    println(i)
 }

类似的如set集合可以使用setOf进行创建,也可以通过可变函数创建mutableSetOf(),以上创建的为可变集合。

特别的,对于Map,因为Map集合是以键值对的形式存在:

val map = mapOf("apple" to 1)

集合函数

maxByOrNull

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val maxLengthFruit = list.maxBy {
    
     it.length }
println("max length fruit is " + maxLengthFruit)

map,映射函数,Lambda中指定映射规则。

  val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
    val fruit = list.map {
    
     it.uppercase(Locale.getDefault()) }
    for (i in fruit)
    {
    
    
        println(i)
    }

filter ,过滤函数,Lambda中指定过滤规则。

   val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
    val fruit = list.filter {
    
     it.length<=4 }.map {
    
     it.uppercase(Locale.getDefault()) }
    for (i in fruit)
    {
    
    
        println(i)
    }

any和all
any存在满足条件的即返回true
all全部满足条件返回true

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
    val anyResult = list.any{
    
     it.length<=5 }
    val allResult = list.all {
    
     it.length<=5 }
    println("anyResult is $anyResult, allResult is $allResult")

猜你喜欢

转载自blog.csdn.net/qq_51978873/article/details/124652113