kotlin基础学习(代码片段)

CrazyApes CrazyApes     2022-11-29     108

关键词:

学!

原文:https://blog.csdn.net/CrazyApes/article/details/122091459

Kotlin

只要学,啥时候都不晚!
这里主要介绍从java转到kotlin中一些常见的基础学习
读完这篇文章
你应该能很快适应kotlin的开发节奏了
内容不断补充中…
点击标题头可以直达文档,因为本文只简介,想了解更详细具体内容的可以直接看原文档

线上编写

Kotlin官网提供了 PlayGround 供大家线上尝试
地址:https://play.kotlinlang.org/

哈哈,没有环境的小伙伴或者只是想尝试的小伙伴,可以使用线上编写。
比如,我写博客的很多东西其实都是在线上试的,哈哈。

变量

弱数据类型

  • var 可变变量
  • val 只读变量 类似final
// 各种示例
var name = "CrazyApes"
name = "CrazyApe"

var myName : String = "CrazyApes"
var age : Int = 99
var number = 3.1
var floatNumber 

val value = "不可变"

class Address 
    var name: String = "Holmes, Sherlock"
    var street: String = "Baker"
    var city: String = "London"
    var state: String? = null
    var zip: String = "123456"

lateinit延迟初始化

需要在特定时期初始化的字段可以用 lateinit 声明

  • 必须初始化后才可以使用,否则会出异常
    kotlin.UninitializedPropertyAccessException: lateinit property value has not been initialized
  • lateinit 声明后不允许赋值为 null, 加问号也不行。
    所以,如以下示例代码,findViewById返回为null会崩,当然,我们本意也不希望它空,但是这个是要注意你如果声明的是一些需要用的变量的话 ,需要注意此类问题。
private lateinit var mBaseView : View
private lateinit var mData : String
private var mNullableStr : String?  = null

// 例如 onCreate
onCreate(...)
    mBaseView = findViewById(R.id.baseView)

    // 未初始化 UninitializedPropertyAccessException
    print(mData)

    // 可检查
    if (mData.isInitialized)
         print(mData)

    // 如果return了null 就  NullPointerException
    mData = getIntent.getExtraString("MaybeNull")

    mNullableStr = getIntent.getExtraString("MaybeNull")
    val length = mNullableStr?.length // 如果null ,return null
    val length1 = mNullableStr?.length ?: -1; // 如果null ,return -1  有点像三目的感觉

空安全

kotlin 是空安全的语言
意思就是你要是没显示声明可以为空,只要遇到了空就报空指针。

  • ?. 安全的调用方式
    如果是 null 不会执行后续的操作,直接返回 null
  • ?:
    如果是 null,则执行冒号后面的部分
  • !!
    非空断言运算符,若果是null,就NullPointerException
private var mNullableStr : String?  = null
private var mNullableList : List<Int?> ?= null

fun testForNullSafe()
    mNullableStr = getIntent.getExtraString("MaybeNull")
    val length = mNullableStr?.length // 如果null ,return null
    val length1 = mNullableStr?.length ?: -1; // 如果null ,return -1  有点像三目的感觉
    val length2 = mNullableStr!!.length; // 如果null ,就  NullPointerException

    mNullableList = listOf(1, 2, null, 4)
}

比较==,===,equals

  • == 结构值相等
    类似Java中equals
  • ===!== 内存引用相等和不等
    类似Java中原来的 == 和 !=
    注意:
    1.如果是基类略等于==,比如Int啥的
    2.Float和Double比较特殊,-0.0 比 0.0小,NaN和NaN是相同的,NaN比无穷大都大。
  • equals
    理解为用于自定义的比较,重写equals方法,不影响==的比较性

for循环

有许多很好用的新函数
比如:
范围 rangeTo1…100 代表1到100
步长 step1…100 step 2 代表1,3,5,7…97,99
降序 downTo100 downTo 1 代表 100,99,98…1 ,其实就是步长为-1
还有很多,直接看例子吧。

fun main() 
    for (i in 1..100)  // 遍历 1 到 100
        println(i) // 1,2,3,4,5,... 99,100

    for (i in 100 downTo 1)  // 遍历 100 到 1
        println(i) // 100,99,98...2,1

    for (i in 100 downTo 1 step 2)  // 遍历 100 到 1 步长为 2
        println(i) // 100,98,96....2

    for (i in 1 until 100)  // 遍历 1 到 100 [1,100) 不包括100
        println(i) // 1,2,3,4 ... 98,99

    val arr = arrayOf("a", "b", "c", "d", "e")
    for (item in arr) // 遍历数组
        println(item) // a,b,c,d,e

    for (i in arr.indices) // 遍历下标
        println(i) // 0,1,2,3,4

    for ((index, value) in arr.withIndex()) // 获取下标及值
        println("the element at $index is $value") // ... 0 is a,...  1 is b,...  2 is c

    arr.reverse() // 反转数组
    for (item in arr) // 遍历反转后的数组
        println(item) // e,d,c,b,a

when

可以替代 switch 和 各种 if…else 语句

        val str = when (index) 
            0 -> "Empty"
            in 1..9 -> "Number"
            in 10..100 -> "under 100"
            else -> "Other"
        

        when 
            index == 0 ->  a + b
            index in 1..9 ->  a - b
            index is Number -> a = b
            index is String -> a = 0
            index == "3" -> a = 3
            else -> a / b
        

Data classes

数据类
大概类似于vo bean pojo 等数据类

注意事项

  • 主构造函数必须要至少有一个参数
    在Java虚拟机里,如果生成的类需要有一个无参数的构造函数,所有属性的默认值必须有一个具体的值

  • 主构造函数中的所有参数必须被标记为val或者var

  • 数据类不能有以下修饰符:abstract,inner,open,sealed

// 常见方式
data class NetData(
        val state: Int,
        val data: Data
) 
    // 等同于java静态内部类 static class
    // kotlin 内部类需 加 inner 标识
    // 没加inner 就是静态内部类
    data class Data(
            val name: String,
            val age: Int,
            val sex: Int
    )


// 需要无参构造的事例
data class User(val name: String = "",
                val age: Int = 0)


静态内部类实现

kotlin 有专门的 inner 标识非静态内部类
没有添加 inner 标识则默认为静态内部类使用


data class NetData(
        val state: Int,
        val data: Data
) 
    // 等同于java静态内部类 static class
    // kotlin 内部类需 加 inner 标识
    // 没加inner 就是静态内部类
    class Data(
            val name: String,
            val age: Int,
            val sex: Int
    )


kotlin入门基础语法学习笔记(代码片段)

敲了一天的kotlin基础语法,整理归纳到一个类里面,便于以后忘记的时候复习。/***CreatedbyGGon2017/11/20.*///main函数funmain(args:Array<String>)vartestMain=TestMain()print(testMain.array())classTestMain//单例的写法compani 查看详情

android:kotlin详细入门学习指南-基础语法(代码片段)

Android:Kotlin详细入门学习指南-基础语法(一)本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Kotlin被Google官方认为是Android开发的一级编程语言自2019年GoogleI/O以来,Kotlin就成为了Android移动开发的首选。... 查看详情

kotlin基础学习关键字(代码片段)

Kotlin线上编写练习Kotlin官网提供了PlayGround供大家线上尝试地址:https://play.kotlinlang.org/原文:https://blog.csdn.net/CrazyApes/article/details/126941878文章目录前言关键字硬关键字HardKeywords软关键字SoftKeywords修饰关键字ModifierK 查看详情

android:kotlin详细入门学习指南-高阶函数-基础语法(代码片段)

本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-高阶函数-基础语法(七)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学习... 查看详情

kotlin基础语法学习笔记(代码片段)

Kotlin简介Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度... 查看详情

kotlin基础学习关键字(代码片段)

Kotlin线上编写练习Kotlin官网提供了PlayGround供大家线上尝试地址:https://play.kotlinlang.org/原文:https://www.jianshu.com/p/ae5f15ceb9b0文章目录前言关键字硬关键字HardKeywords软关键字SoftKeywords修饰符关键字Modifierkeywords特殊标识符Specia 查看详情

kotlin基础学习关键字(代码片段)

Kotlin线上编写练习Kotlin官网提供了PlayGround供大家线上尝试地址:https://play.kotlinlang.org/原文:https://www.jianshu.com/p/ae5f15ceb9b0文章目录前言关键字硬关键字HardKeywords软关键字SoftKeywords修饰符关键字Modifierkeywords特殊标识符Specia 查看详情

android:kotlin详细入门学习指南-类和对象(上)-基础语法(代码片段)

本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-类和对象-基础语法(四)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学习... 查看详情

android:kotlin详细入门学习指南-类和对象(下)-基础语法(代码片段)

本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-类和对象(下)-基础语法(五)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学... 查看详情

android:kotlin详细入门学习指南-包-控制流-返回与跳转-基础语法(代码片段)

本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-包-控制流-返回与跳转-基础语法(三)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详... 查看详情

kotlin基础学习(代码片段)

学!文章目录Kotlin变量lateinit延迟初始化空安全DataClasses静态内部类实现Kotlin只要学,啥时候都不晚!这里主要介绍从java转到kotlin中一些常见的基础学习读完这篇文章你应该能很快适应kotlin的开发节奏了内容不断补充... 查看详情

kotlin学习——协程coroutine基础(代码片段)

其实在Kotlin中,还有很多的概念没有去讲解,在后续的文章再去补充,我们先来一篇协程的基础介绍吧,协程是kotlinforandroid中的一个重要概念,我们在加载一段数据的时候,最开始的使用方式是加载数据-... 查看详情

android:kotlin详细入门学习指南-函数-基础语法(代码片段)

本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Android:Kotlin详细入门学习指南-函数-基础语法(六)建议先看看前面的文章Android:Kotlin详细入门学习指南-基础语法(一)Android:Kotlin详细入门学习指南-... 查看详情

kotlin挂起函数基础(代码片段)

...c;比普通的函数多了suspend关键字。通过suspend关键字,Kotlin编译器就会特殊对待这个函数,将其转换成一个带有Callback的函数,这里的Callback就是Continuation接口。    例         CPS转换:susp 查看详情

android开发语言——kotlin学习笔记(代码片段)

Kotlin本Blog是我学习《Android第一行代码-第三版》的学习笔记,将会不定期断更持续更新。(默认大家都和我一样学过C++或Java的基础语法)。Kotlin简介在Android诞生的前几年中,Java一直是Android的主要开发语言。在2017年&#... 查看详情

kotlin学习知识点(代码片段)

...d旅行,Android基础领域博主 ,引用必须注明出处!Kotlin越来越流行,新的知识点和应用技巧,也十分吸引人,尤其是协程,其他还有规避回调的代码写法(类似RxJava)。下面是经典写法,比较符... 查看详情

字节内部超全kotlin学习笔记,快速上手kotlin开发,基础+实战+源码,手把手带你吃透kotlin语法与协程。(代码片段)

目前市面上主流的App和库,大都是使用Kotlin语言开发的,在PlayStore的前1000个应用程序中有80%以上使用Kotlin。这也意味着,对于Android应用开发者来说,仅仅掌握Java是不够的,你还应该学习Kotlin,才能追上技... 查看详情

kotlin学习(代码片段)

 集合:  Kotlin可以使用Java声明集合的方法,也有自己的声明方式。//Java方式vala=ArrayList<Int>()//Kotlin方式valb=arrayListOf<Int>()  顶层函数和属性:  Kotlin中没有static修饰符。  为了消除静态工具类,Kotlin可... 查看详情