kotlin基礎(chǔ)復(fù)習(xí)總結(jié)

一、定義常量/變量

val? 定義常量? getter

var? 定義變量? setter? getter

lateinit? 和 var配合使用,表示可以延遲初始化的變量;基礎(chǔ)數(shù)據(jù)類型和val修飾的變量不能使用;

「Kotlin 的基本數(shù)值類型包括 Byte、Short、Int、Long、Float、Double 等。不同于Java的是,字符不屬于數(shù)值類型,是一個獨立的數(shù)據(jù)類型」

注意: ? 定義變量,表示可以為空;? eg: var name: String? = ""

? ? ? 變量后邊,表示如果變量為空則不處理; eg:name?.length

? ? !! 變量后邊,表示變量必然不能為空,如果為空則會拋出空指針異常;eg: name!!.length

訪問權(quán)限修飾符:

private? 只在本文件可見;

protected? 同一個文件和子類中可見;

public? ? 所有調(diào)用的地方都可見;

internal? 同一個模塊中可見,表示這個類方法只適合當前module使用。

二、定義類

class/final class? ? 定義一般類,默認定義類都是final 類;

open? class? 定義可以繼承的類,可以繼承類的中函數(shù)如果需要重寫也需要添加open

abstract class? 定義抽象類,

enum? class? 枚舉類

object? 靜態(tài)類,方法和變量都是靜態(tài)的;

「衍生:companion? object? 修飾為伴生對象,伴生對象在類中只能存在一個,類似于java中的靜態(tài)方法 Java 中使用類訪問靜態(tài)成員,靜態(tài)方法。相當于一個靜態(tài)區(qū)域」

inner class? 內(nèi)部類;內(nèi)部類中調(diào)用外部 eg:this@Outer.param

data? class? 數(shù)據(jù)類;

為了保證生成代碼的一致性以及有意義,數(shù)據(jù)類需要滿足以下條件:

主構(gòu)造函數(shù)至少包含一個參數(shù)。

所有的主構(gòu)造函數(shù)的參數(shù)必須標識為val 或者 var ;

數(shù)據(jù)類不可以聲明為 abstract, open, sealed 或者 inner;

數(shù)據(jù)類不能繼承其他類 (但是可以實現(xiàn)接口)

sealed class? 密封類,不能直接實例化,只能實例化子類;

構(gòu)造函數(shù):

主構(gòu)造函數(shù):寫到類名后邊? eg: class? object(var name:String)

主構(gòu)造器中不能包含任何代碼,初始化代碼可以放在初始化代碼段中,初始化代碼段使用 init 關(guān)鍵字作為前綴。

次構(gòu)造函數(shù):類也可以有二級構(gòu)造函數(shù),需要加前綴 constructor;

三、定義接口

interface?

允許方法有默認實現(xiàn),

接口中的屬性只能是抽象的,不允許初始化值,接口不會保存屬性值,實現(xiàn)接口時,必須重寫屬性;

四、Lambda表達式

這是Lambda表達式最完整的語法結(jié)構(gòu)。

{參數(shù)名1:參數(shù)類型,參數(shù)名2:參數(shù)類型 -> 函數(shù)體}

() -> Unit//表示無參數(shù)無返回值的Lambda表達式類型

(T) -> Unit//表示接收一個T類型參數(shù),無返回值的Lambda表達式類型

(T) -> R//表示接收一個T類型參數(shù),返回一個R類型值的Lambda表達式類型

(T, P) -> R//表示接收一個T類型和P類型的參數(shù),返回一個R類型值的Lambda表達式類型

(T, (P,Q) -> S) -> R//表示接收一個T類型參數(shù)和一個接收P、Q類型兩個參數(shù)并返回一個S類型的值的Lambda表達式類型參數(shù),返回一個R類型值的Lambda表達式類型

1、首先最外層一對大括號。

2、如果有參數(shù)傳入Lambda表達式,我們還需要聲明參數(shù)列表。

3、參數(shù)列表的結(jié)尾使用->符號,表示參數(shù)列表的結(jié)束以及函數(shù)體的開始,函數(shù)體中代碼長度不限

4、Lambda表達式最后一行代碼表示Lambda表達式的返回值。

? eg: val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })

5、當Lambda是函數(shù)的最后一個參數(shù)時,可以將Lambda表達式移到函數(shù)的括號外面。

? eg: val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length }

6、如果Lambda是函數(shù)的唯一參數(shù)的話,可以省略函數(shù)的括號。

? eg: val maxLengthFruit = list.maxBy{ fruit: String -> fruit.length }

7、由于Kotlin擁有出色的類型推導(dǎo)機制,所以Lambda的參數(shù)列表大多數(shù)情況下不需要聲明參數(shù)類型

? eg: val maxLengthFruit = list.maxBy{ fruit -> fruit.length }

8、Lambda表達式只有一個參數(shù)時,也沒必要聲明參數(shù)名稱,可以用it代替。

? eg: val maxLengthFruit = list.maxBy{ it.length }

五、高階函數(shù)

高階函數(shù)即指:將函數(shù)用作一個函數(shù)的參數(shù)或者返回值的函數(shù)。

eg:? ? fun hightFun(x: Int, y: (Int,Int) -> Int){}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容