Android --- Kotlin学习之路:基础语法学习笔记

------>可读可写变量

kotlin 复制代码
var name: String = "Hello World";

------>只读变量

kotlin 复制代码
val name: String = "Hello World"

------>类型推断

kotlin 复制代码
val name: String = "Hello World" 可以写成 val name = "Hello World"

------>基本数据类型

kotlin 复制代码
1.String,Double,Int,Float,Long,Short,Byte,Char,Boolean
2.Kotlin对于小数的默认推断是Double类型,默认6位
3.and(bits),or(bits), inv()

------>编译时常量

kotlin 复制代码
const val PI = 3.1415 需要定义在全局变量范围内,不能定义到函数内部,这才叫编译时常量

------>range 表达式

kotlin 复制代码
val number = 148
        if (number in 0 .. 59) {
            println("不及格")
        } else if (number in 60 .. 100) {
            println("及格")
        } else if (number !in 0 .. 100) {
            println("成绩无效")
        }
        

------>when 表达式

kotlin 复制代码
 val month = "January"
        val result = when(month) {
            "January" -> "一月"
            "February" -> "二月"
            "March" -> "三月"
            "April" -> "四月"
            "May" -> "五月"
            "June" -> "六月"
            "July" -> "七月"
            "August" -> "八月"
            "September" -> "九月"
            "October" -> "十月"
            "November" -> "十一月"
            "Devember" -> "十二月"
            else -> "错误的月份"
        }
        println(result)
        

------>String 模板

kotlin 复制代码
 val isLogin = true
        println("server respose result : ${if (isLogin) "登录成功" else "登录失败"}")
		

------>具名函数参数

具名函数的意义是:假如一个函数有多个参数,传递参数的时候为了避免一个一个对,可以直接用名字赋值

kotlin 复制代码
loginAction(name = "Derr", age =90)
        private fun loginAction(name: String, age: Int) {
            println("name is : ${name}, age is : ${age}")
        }

------>Nothing 类型会终止程序

kotlin 复制代码
TODO("not implement")  

------>双等号相当于Java中的equals(),三哥等号是引用的比较,也就是地址的比较

------>类型转换相关

kotlin 复制代码
val number1 : Int? = "666.6".toIntOrNull() // 能转换成功就转换,不成功就返回Null
val r = "%3.f".format(65.38344) // r 的类型是String
println(65.683.roundToInt()) // 会四舍五入,结果是66

------>apply 内置函数

kotlin 复制代码
apply 函数会返回对象本身
val file = File("D:\\a.txt")
// 普通写法
file.setExecutable(true)
file.setReadable(true)
println(file.readLines())

//apply写法
file.apply {
	setExecutable(true) // 这里面会有this引用,可以省略不写
}.apply {
	setReadable(true)
}.apply {
	println(readLines())
}.ll

------>let 内置函数

kotlin 复制代码
fun main() {
    println(getMethod(null))
}
fun getMethod(value: String?): String {
	// 判空用法,当value为空的时候将不会执行闭包里面的逻辑
    return value?.let {
        "值是非空的"
    } ?: "值是空的"
}

------->run 扩展函数

最后一行当作函数的返回值,在run函数中可以直接访问实例的公有属性和方法

kotlin 复制代码
fun main() {
    println(testRun(Jump()))
}

class Jump {
    fun test():String {
        return "111"
    }
}
fun testRun(jump: Jump) : String {
    jump.run {
        test() // 直接调用
        return jump.test()
    }
}

------>数组的创建

kotlin 复制代码
 val array: Array<Any> = arrayOf(1, 2, 3, 4)
 println(array[0])

 val arrayOfNulls = arrayOfNulls<Any>(5)
 arrayOfNulls[0] = "1"
 arrayOfNulls[1] = 'A'
 arrayOfNulls[2] = 1
 arrayOfNulls.forEachIndexed(action = {
     index, item ->
     println("$index:$item")
 })

------>可变的集合,不可变的集合

kotlin 复制代码
 // 可变集合
 val array = mutableListOf<Any>()
 array.add("1")
 array.add(2)
 // 不可变集合
 val arrayInt = listOf(1,2,3)
 // 可变Map
 val arrayMap = mutableMapOf<String, Int>()
 arrayMap["1"] = 1
 arrayMap["2"] = 1
 // 不可变Map,通过Pair指定集合里面的元素
 val arrayMap2 = mapOf<String, Int>(Pair("1",1))
 for (item in arrayMap2) {
     println(item)
 }

------>

kotlin 复制代码
Person().test()
Person.test2()
println(NumUtil.double(4))

// 普通类
class Person {
    fun test() {
        println("猪头")
    }
    // 半生类
    companion object{
        fun test2() {
            println("半生类")
        }
    }
}

// 静态类
object NumUtil {
    fun double(num: Int): Int {
        return num * num
    }
}

------>泛型类和泛型接口

kotlin 复制代码
fun main() {
    val drinkFruits = DrinkFruits()
    drinkFruits.drinks("apple juice")

    val eat = EatEgg("blue")
    eat.prints()
}
// 泛型接口
interface Drink<T> {
    fun drinks(t: T)
}
class DrinkFruits: Drink<String> {
    override fun drinks(t: String) {
        println("Drink:$t")
    }
}
// 泛型类
abstract class Eat<T> {
    abstract fun prints()
}

class EatEgg(val color: String) : Eat<String>() {
    override fun prints() {
        println("eat:${color}'s egg")
    }
}

------->扩展方法

扩展方法在什么时候使用呢?

当一个jar包中的方法不满足我们的需求时,

我们可以给jar包中的某个类添加方法,因为jar包中的那个方法本身是不可以修改的

kotlin 复制代码
fun main() {
    println(Jump().doubleJump())
}

class Jump {
}

fun Jump.doubleJump(): String {
    val result = "此方法为扩展方法"
    return result
}

----------->延迟初始化

kotlin 复制代码
private lateinit var _binding: FragmentFirstBinding

-----------------------------------------基础知识学习完之后训练的例子-------------------------------------------------

kotlin 复制代码
package com.example.kotlindemo

// 一次2位数四则运算
fun main() {
    while(true) {
        // 控制台输入
        println("请输入一个2位数的加减乘除")
            val input = readLine()
        input?.let {
            val result = calculate(input)
            println(result)
            println("是否继续使用程序,继续使用请输入Y,不使用请输入N")
            val inputContinue = readLine()
            inputContinue?.let {
                if (it != "Y") {
                    System.exit(-1)
                }
            }
        }
    }

}

fun calculate(input: String): String {
    if (input.contains("+")) {
        val strings = input.trim().split("+")
        return operate(strings[0].toDouble(), strings[1].toDouble(), "+").toString()
    } else if (input.contains("-")) {
        val strings = input.trim().split("-")
        return  operate(strings[0].toDouble(), strings[1].toDouble(), "-").toString()
    } else if (input.contains("*")) {
        val strings = input.trim().split("*")
        return  operate(strings[0].toDouble(), strings[1].toDouble(), "*").toString()
    } else if (input.contains("/")) {
        val strings = input.trim().split("/")
        return  operate(strings[0].toDouble(), strings[1].toDouble(), "/").toString()
    } else {
        return "you input is error!"
    }
}

fun operate(num1: Double, num2: Double, operateChar: String): Double {
    return when(operateChar) {
        "+" -> num1 + num2
        "-" -> num1 - num2
        "*" -> num1 * num2
        "/" -> num1 / num2
        else -> 0.0
    }
}
相关推荐
Mephisto.java2 分钟前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
晨曦_子画7 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
大福是小强8 分钟前
005-Kotlin界面开发之程序猿初试Composable
kotlin·界面开发·桌面应用·compose·jetpack·可组合
孤客网络科技工作室29 分钟前
AJAX 全面教程:从基础到高级
android·ajax·okhttp
南宫生30 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
武子康2 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
Mr Lee_2 小时前
android 配置鼠标右键快捷对apk进行反编译
android
使者大牙2 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
As977_2 小时前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi2 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet