Kotlin語法整理
- Kotlin語法整理
- 一、基本數據類型
- 共8種
- 二、變量的聲明
- 三、條件
- 1. if…else if…else語句
- 2. when 語句
- 四、循環
- 1. while 語句
- 2. do…while 語句
- 3. for 語句
- 4. repeat 語句
- 5. break 語句
- 6. continue 語句
- 五、數組
- 1. 創建元素未初始化的數組
- 2. 創建元素初始化的數組
- 3. 空數組
- 4. 二維數組
- 六、函數和高階函數
- 1. 函數聲明
- 2. Lambda 表達式的基本形式
- 七、類
- (一) 類的聲明
- (二) 創建類的實例
- (三) 屬性的 get()和 set()方法
- 1. 屬性的 get()方法
- 2. 屬性的 set()方法
- (四) 擴展屬性和擴展方法
- 1. 擴展方法
- 2. 擴展屬性
- (五) 繼承
- (六) 包
- (七) 接口
- 八、委托
- 1. 類的委托
- 2. 變量的委托
- 九、枚舉
- 1. 枚舉類的常用屬性屬
- 2. 枚舉類的常用方法
- 十、泛型
- 1. 泛型類
- 2. 泛型接口
- 3. 泛型方法
- 十一、異常處理
- 一、基本數據類型
提示:語法格式符號
“|”表示多選一的并列關系,“[]”表示可選項。這兩個語法格式符號用于幫助理解語法,實際程序中并不會出現。
一、基本數據類型
共8種
- Byte, Short, Int, Long, Float, Double, Boolean, Char.
二、變量的聲明
語法格式
var|val identifier [: type][ = value]
var
用于聲明可變變量,val
用于聲明不可變變量[: type]
是指數據類型。當有初始化賦值時可省略,系統自動判斷數據類型。[ = value]
是對變量進行初始化賦值。當指定數據類型時可暫時不進行初始化賦值。
三、條件
1. if…else if…else語句
if…else if…else
語句是多條件判斷的分支結構語句。程序運行到 if 語句時,對 condition1 的邏輯值進行判斷。當 condition1
的邏輯值為 true
時,執行完 statement1
語句,結束 if…else if…else
語句。否則,對 condition2
的邏輯值進行判斷,當 condition2
的邏輯值為 true
時,執行 statement2
語句體,然后結束 if…else if…else
語句。else if
可以根據需要添加多組,當執行到 else 語句時,無須進行邏輯判斷,直接執行 statementN
語句體。
語法格式
if (condition1){statement1
} else if (condition2){statement2
}
…
else if{statementN
} else {statement(N+1)
}
- 必選項:
condition1,condition2,…,conditionN
是用于條件判斷的 Boolean 類型變量或邏輯表達式。
2. when 語句
當分支情況較多時,使用 else if
語句會顯得不夠簡潔,使用 when
語句可以解決這個問題。when
語句根據 expression
的值判斷與哪個 value
值相等或符合 value
值的區間范圍,然后執行 “ ->
” 后的 statement
語句體。如果與 value
值都不相等或不符合 value
值的區間范圍,則執行 else
語句后的 statementDefault
語句體。
語法格式
when (expression) {[in|!in value1..value1N]|[value1[,…][,value1N]]|[is Type1] -> {statement1}[in|!in value2..value2N]|[value2[,…][,value2N]]|[is Type2] -> {statement2}…[in|!in valueN..valueNN]|[valueN[,…][,valueNN]]|[is TypeN] -> {statementN}[else -> {statementDefault}]
}
- 必選項:
expression
是條件判斷的變量或表達式。 - 可選項:
[in|!in value1..value1N]
表示在 value1~value1N 區間內或外。
例如,in 1…10 表示在1~10區間內,!in 1…10 表示在1~10區間外。 - 可選項:
[value1[,…][,value1N]]
表示符合條件的并列關系值。例如,1,3,4表示 expression 值等于1、3或4。 - 可選項:
[is Type1]
表示符合條件的數據類型。例如,is String 表示是 String 類型。 - 可選項:
[else ->{statementDefault}]
表示以上條件均不符合時執行 StatementDefault 語句體。
四、循環
1. while 語句
while
語句是先進行條件判斷后執行循環體代碼的循環語句。程序運行到 while
語句時,對 condition
的邏輯值進行判斷。當 condition
的邏輯值為 true
時,執行花括號包含的 statement
語句體,然后返回到 while
語句;當 condition
的邏輯值為 false
時,執行花括號之后的語句。
語法格式
while (condition) {statement
}
- 必選項:
condition
是用于條件判斷的 Boolean 類型變量或邏輯表達式。
2. do…while 語句
do…while
語句是先執行循環體代碼后進行條件判斷的循環語句。程序運行到 do
語句時,執行 statement
語句體。運行到 while
語句時,對 condition
的邏輯值進行判斷。當 condition
的邏輯值為 true
時,返回到 do
語句;當 condition
的邏輯值為 false
時,結束循環。
語法格式
do {statement
} while (condition)
- 必選項:
condition
是用于條件判斷的 Boolean 類型變量或邏輯表達式。
3. for 語句
for
語句也是一種先進行條件判斷后執行循環體代碼的循環語句。for
語使用 startInt
作為 variableName
循環變量的循環初始值,判斷 variableName
循環變量是否達到終止循環的 endInt
。如果達到或超過終止循環的 endInt
,則終止循環,執行花括號后的語句;如果沒有達到終止循環的 endInt
, 則執行花括號內的 statement
語句體。然后返回到 for
語句,將 variableName
循環變量與 stepInt
進行運算:使用 until
關鍵字時,variableName
的值加上 stepInt
循環增量;使用 downTo
關鍵字時, variableName
的值減去 stepInt
循環增量;使用…運算符代替 until
關鍵字和 downTo
關鍵字時,根據 startInt
和 endInt
的大小自動判斷循環結束后加上或減去 stepInt
循環增量。stepInt
的默認值為 1。最后判斷 variableName
循環變量是否達到終止循環的 endInt
。
語法格式
for (variableName in startInt until|downTo|.. endInt [step stepInt]) {statement
}
- 必選項:
variableName
是循環變量。 - 必選項:
startInt
是循環變量的初始值,endInt 是循環變量的結束值。(不包括此值) - 可選項:
[step stepInt]
是循環增減量,默認值為 1。
4. repeat 語句
repeat
語句是指定循環次數的循環語句,同時默認使用 it
變量表示當前的循環次數(如果 Lambda
表達式只有一個參數,而且能夠根據代碼判斷出來參數的數據類型,那么這個參數可以省略,并且可以在語句體中使用 it
關鍵字代替該參數)。程序運行到 repeat
語句時,根據 times
指定的次數執行 statement
語句體。
語法格式
repeat (times) {statement
}
- 必選項:
times
是循環次數,必須是整數。
5. break 語句
break
語句用于跳出當前循環語句或者 switch
語句,并且繼續執行當前循環語句或者 switch
語句之后的下一條語句。在循環語句中,break
語句通常嵌入 if
語句中使用,當滿足一定條件時跳出循環。
6. continue 語句
continue
語句是在循環語句中能夠立刻跳轉到下一次循環的語句。在循環語句中, continue
語句通常嵌入 if
語句中使用,當滿足一定條件時結束本次循環。
五、數組
1. 創建元素未初始化的數組
在能夠確定數組元素數量卻無法確定元素值的情況下,可以創建指定長度的數組,然后根據需要再進行賦值。雖然可以定義數組長度,但是無法重新定義數組長度。
語法格式
var|val arrayName = arrayOfNulls<dataType>(arraySize)
- 必選項:
arrayName
是數組的名稱。 - 必選項:
dataType
是數組的類型。 - 可選項:
arraySize
是數組元素的數量。
2. 創建元素初始化的數組
根據初始化元素的數據類型,分為兩種語法格式**:基本數據類型數組和其他類型數組,數組所包含元素的數據類型必須與數組的數據類型一致。
語法格式
//基本數據類型數組創建
var|val arrayName : type?rray = typeArrayOf([elementO, element1,…, elementN])
//其他類型數組創建
var|val arrayName[:Array<dataType>] = arrayOf([element0, element1,…, elementN])
- 必選項:
arrayName
是數組的名稱。 - 必選項:
typeArray
是基本數據類型的數組類,包括 BooleanArray、CharArray、ByteArray、ShortArray、IntArray、LongArray、FloatArray、DoubleArray。 - 必選項:
typeArrayOf
需要與 typeArray 的類型相對應,
如 IntArray 對應 intArrayOf 。arrayOf 是固定的關鍵字。 - 可選項:
[:Array<dataType>]
是數組的數據類型,默認時會根據元素的初始值自動判斷數據類型。 - 可選項:
element0,element1,…,elementN
是每個元素的初始值,每個元素的數據類型必須一致。
3. 空數組
可以使用 emptyArray<dataType>()
方法創建空數組。要使用數組時,需要使用 arrayOf
或 typeArrayOf
語句對數組進行初始化,或者賦值一個非空數組,才能對元素進行操作。
語法格式
var|val arrayName = emptyArray<dataType>()
- 必選項:
arrayName
是空數組的名稱。 - 必選項:
dataType
是空數組的類型。
4. 二維數組
二維數組本質上是以數組作為元素的數組,即 “數組的數組”,其中每一個元素都是一個一維數組。二維數組可以理解成一個表格,第一個下標表示行數,第二個下標表示列數。在創建二維數組時,可以嵌套或使用一維數組初始化的方式實現。
語法格式
//使用嵌套的方式創建二維數組
val|var arrayName = Array(arrayLenght1){typeArray(arrayLenght2)}
//使用一維數組直接創建二維數組
val|var arrayName = arrayOf([array1, array2,…, arrayN])
- 必選項:
arrayName
是數組的名稱。 - 必選項:
arrayLenght1
是包含的一維數組數量,arrayLenght2是所包含一維數組的元素數量。 - 必選項:
typeArray
是基本數據類型的數組類,包括 BooleanArray、CharArray、ByteArray、ShortArray、IntArray、LongArray、FloatArray、DoubleArray。 - 可選項:
array1,array2,…,arrayN
是單獨的一維數組,且數據類型必須一致。
六、函數和高階函數
1. 函數聲明
函數用于封裝可重復使用的代碼片段,使用 fun 關鍵字定義。函數可以包含參數和返回值,也可以不包含參數和返回值。函數參數的作用域是函數內部,沒有返回值時的返回類型是Unit 類型。調用函數時,使用函數名加括號包含參數值。
語法格式
//聲明函數
fun functionName([para0[:type0][,para1[:type1]][,…][,paraN[:typeN]]]) [:returnType] {statement[return returnValue]
}
//調用函數
functionName([para0[:type0][,para1[:type1]][,…][,paraN[:typeN]]])
- 必選項:
functionName
是函數的名稱。 - 可選項:
para0、para1、…、paraN
是函數參數。 - 可選項:
type0、type1、…、typeN
是函數參數的數據類型。 - 可選項:
[:returnType]
用于設置函數返回值的類型,需要與 [return returnValue] 一起使用,returnType 是返回值的類型。 - 可選項:
[return returnValue]
用于設置函數的返回值,返回值的類型需要與 [:returnType] 設置的類型一致,returnValue 是返回值。
2. Lambda 表達式的基本形式
Lambda
表達式的本質是匿名函數,多作為高階函數使用,也可以直接使用。 使用 Lambda
表達式可以減少代碼量,使代碼更加簡潔,但是會增加理解的難度。在 Lambda
表達式中,->
左側的是匿名函數的參數,右側的是匿名函數的語句體。語句體中可以有返回值,也可以沒有返回值。返回值可以使用 return
語句進行設置,也可以不使用return
語句而將最后一行的單個表達式或變量作為返回值。
語法格式
{[para0[:type0][,para1[:type1]][,…][,paraN[:typeN]]] -> statement }
- 可選項:
para0、para1、…、paraN
是 Lambda 表達式的參數。 - 可選項:
type0、type1、…、typeN
是 Lambda 表達式參數的數據類型。
七、類
(一) 類的聲明
Kotlin
提供了大量的內置類來實現各項基本功能,也可以使用 class
關鍵字聲明自定義類。類中一般包含主構造方法、初始化塊、次構造方法、屬性和方法。 主構造方法在類名后使用 constructor
關鍵字定義,可以省略。初始化塊使用 init
關鍵字,不能添加參數。次構造方法在類內部使用 constructor
關鍵字定義,可以添加參數。屬性(即成員變量)使用 var
或 val
關鍵字在類內部的構造方法和方法外直接聲明。方法是指類中的函數,方法和函數在定義時只有是否在類內部的區別。
語法格式
class ClassName [constructor([[var|val] attrConst:Type])]{[var|val attribute[:Type][ = value] ][init{statement}][constructor([para:Type])[:this(attrConst)]{statement}][fun functionName([para:Type])[:ReturnType]{statement[return value]}]
}
- 必選項:
ClassName
是類的名稱。 - 可選項:
[constructor([[var|val] attrConst:Type])]
是主構造方法,如果主構造方法有注解或可見性修飾符,constructor 關鍵字可以省略。[[var|val] attrConst:Type] 是主構造方法的可選參數,多個參數之間使用逗號分隔。如果使用var
或val
聲明參數,則會被自動轉換為類的屬性,否則只能使用在初始化塊內。 - 可選項:
[var|val attribute[:Type][=value]]
是類的屬性,與變量的聲明方法相同,一個類可以有多個屬性。 - 可選項:
[init {statement}]
是初始化塊,在屬性初始化后執行,沒有參數,每個類只能有一個初始化塊。 - 可選項:
[constructor([para:Type])[:this(attribute)]{statement}]
是次構造方法,在初始化塊之后執行。[para:Type] 是可選參數,多個參數之間用逗號分隔。可以有多個參數不同的次構造方法,即次構造方法的重載,在后續章節中會介紹重載的概念。如果主構造方法和次構造方法同時存在,則次構造方法需要使用 [:this(attrConst)] 調用主構造方法,先執行主構造方法再執行次構造方法。 - 可選項:
[fun functionName([para:Type])[:ReturnType]{statement [retum value]}]
是類的方法。[para:Type] 是可選參數,多個參數之間用逗號分隔。[:ReturnType] 是方法的返回值類型,設置后需要使用 [return value] 提供返回值。
(二) 創建類的實例
類不能直接使用,需要通過類的實例來使用,使用 var
或 val
聲明類實例的變量。聲明類變量的同時還可以進行實例化,實例化后才能通過實例的變量調用類的屬性和方法。
語法格式
//聲明類實例的變量
var|val instanceName:ClassName
//聲明類實例的變量并進行實例化
var|val instanceName = ClassName([para])
- 必選項:
instanceName
是類的實例名 - 必選項:
ClassName
是類名。 - 可選項:
[para]
是調用主構造方法或次構造方法的參數,多個參數之間使用逗號分隔,ClassName([para]) 返回該類的實例。
類的實例可以使用.運算符調用類的屬性和方法,var
聲明的屬性可以通過實例調用進行修改,val
聲明的屬性不可以修改。而主構造方法、初始化塊和次構造方法無法直接調用,而是在實例化時自動調用的。
(三) 屬性的 get()和 set()方法
屬性定義后可以使用 get()
和 set()
方法對屬性的賦值和調用進行預處理。這兩個方法只能在屬性的聲明后立即使用,無須使用 fun
關鍵字,方法內使用 field
關鍵字表示屬性值。
1. 屬性的 get()方法
當調用屬性時,執行屬性的 get()
方法。通常會在方法內對屬性值進行預處理,通過 return
關鍵字返回屬性值。如果塊語句體可以簡化為表達式語句體,也可以使用表達式語句體的形式。
語法格式
get() {statementreturn value
}
或
get() = expression
- 必選項:
value
是 get() 方法的返回值,即調用屬性的返回值。 - 必選項:
expression
是調用屬性的返回值,可以直接使用單個變量作為返回值,也可以使用表達式。
2. 屬性的 set()方法
使用 val
聲明屬性時,無法設置 set()
方法。當屬性被賦值時,執行屬性的 set()
方法。該方法包含一個參數,該參數表示使用=運算符賦值時傳遞的數據。
語法格式
set(value){statementfield = expression
}
或
set(value) = expression
- 必選項:
value
是存儲屬性使用=運算符賦值的數據的變量,可以使用任何合法的變量名。 - 必選項:
field
是使用 set() 方法預處理后的屬性值。 - 必選項:
expression
是設置屬性值的單個變量或表達式。
(四) 擴展屬性和擴展方法
可以在類的外部為該類擴展屬性和方法,以達到增加功能的作用。聲明擴展方法和擴展屬性時,需要用被擴展的類名作為前綴。
1. 擴展方法
語法格式
fun ClassName.functionName([para:Type])[:ReturnType]{statement[return value]
}
- 必選項:
ClassName
是要擴展方法的類名。 - 必選項:
functionName
是擴展的方法名。 - 可選項:
[para:Type]
是可選參數,多個參數之間用逗號分隔。 - 可選項:
[:ReturnType]
是方法的返回值類型,設置后需要使用 [return value] 提供返回值。
2. 擴展屬性
展屬性與普通屬性的區別是 get()
方法和 set()
方法無法使用 field
關鍵字獲取屬性值,且 get()
方法的返回值是可選項。使用 val
聲明擴展屬性時,同樣無法設置 set()
方法。
語法格式
var|val ClassName.attribute: Typeget() {statement1[return returnValue]}[set(value) {statement2}]
或var|val className.attribute: Typeget() = expression1[set(value) = expression2]
- 必選項:
ClassName
是要擴展屬性的類名。 - 必選項:
attribute
是擴展屬性的屬性名。 - 可選項:
[return returnValue]
。 - 可選項:
[set(value) {statement2}]
只有擴展屬性使用 var 關鍵字聲明的時候才可以使用。 - 可選項:
[set(value)=expression2]
只有擴展屬性使用 var 關鍵字聲明的時候才可以使用。
(五) 繼承
類可以有繼承的關系,子類可以繼承父類的屬性和方法。Kotlin 中只允許單繼承,即每個類最多只能繼承一個父類,但是父類還可以再向上繼承。 只要有繼承關系,子類中無須包含父類的屬性和方法就可以使用這些屬性和方法。創建類時,在類名后使用:
連算符連接父類名稱,就可以繼承父類所有的屬性和方法。而父類則需要添加 open
發鍵字后才能允訴其他類繼承。
語法格式
class ClassName : ParentClassName{statement
}
- 必選項:
ClassName
是類的名稱。 - 必選項:
ParentClassName
是 ClassName 類繼承的父類名稱。
(六) 包
包 ( package
) 對功能相似或相關的類和接口的組織形式,提供了訪問保護和命名空間管理的功能。使用 package
關鍵字定義包,如同文件夾一樣,包采用了樹形目錄的存儲方式,每級包之間使用.運算符連接。同一個包中的類名是不能相同的,不同包中的類名是可以相同的,當同時調用兩個不同包中相同類名的類時,需要加上包名來區別以避免名字沖突。
語法格式
package packageName1[.packageName2][.…][.packageNameN]
- 必選項:
packageName1
是在工程內源代碼根目錄下包含該類的文件夾。 - 可選項:
[.packageName2][.…][.packageNameN]
是類在 packageName1 包內的文件夾路徑(.運算符表示文件夾的層級關系)。
在不同包內的類不能直接調用,需要使用 impont
關鍵字引人類所在的包后,才能使用。
語法格式
import packageName1[.packageName2][.…][.packageN].(className|*)
- 必選項:
.(className|*)
引人某一個類或包內所有的類。 className 表示要導人的類名,* 表示導入包內所有的類。
(七) 接口
接口使用 interface
關鍵字進行定義。接口內的屬性只能是抽象變量,且不能初始化賦值,默認修飾符是 public abstract
。接口內只定義而未實現的方法是抽象方法,默認修飾符是 public abstract
。
語法格式
interface InterfaceName [: ParentInterfaceName]{statement
}
- 必選項:
InterfaceName
是接口的名稱。 - 可選項:
[:ParentInterfaceName]
是要繼承的接口名稱。
類實現接口時,需要使用:運算符,并且可以同時實現多個接口。實現接口的類必須重寫抽象屬性
和抽象方法。
語法格式
class ClassName :InterfaceName{statement
}
- 必選項:
ClassName
是實現接口的類名稱。 - 必選項:
InterfaceName
是實現接口的名稱,多個名稱使用逗號分隔,這里的冒號表示實現接口。
八、委托
1. 類的委托
類的委托是將接口定義的方法通過實現該接口另一個類的對象實現的方式。委托類和被委托類明時都定義了同一個接口,委托類實現了該接口的抽象方法。
語法格式
class ClassName : InterfaceName by DelegateClassName() {statement
}
或
class ClassName (delegate:DelegateClassName) : interfaceName by delegate {statement
}
- 必選項:
ClassName
是類的名稱。 - 必選項:
InterfaceName
是接口的名稱。 - 必選項:
DelegateClassName
是委托類的名稱。 - 必選項:
delegate
是委托類實例的變量名。
2. 變量的委托
變量的委托是指變量不使用 set()
和 get()
方法進行預處理,而將其委托給另一個類的方式。委托類需要導人 kotlin.reflect.KProperty
命名空間,并且需要添加 getValue()
方法和 setValue()
方法實現變量的調用與賦值。聲明變量時使用 by
關鍵字設置委托類,設置委托類時變量不能進行初始化賦值。
語法格式
val|var identifier [: type] by DelegateClassName()
- 必選項:
identifier
是變量的名稱。 - 必選項:
DelegateClassName
是委托類的名稱。 - 可選項:
[:type]
是數據類型。
九、枚舉
枚舉 ( Enum
) 是通過預定義列出所有值的標識符來定義的有序集合。枚舉繼承自 Enum
類,由于 Kotlin
不支持多繼承,所以枚舉對象不能再繼承其他類,但是可以繼承接口。枚舉類提供了一些常用的屬性和方法。
語法格式
enum class enumName [(para:Type)] {ELEMENT0[(рaгa0)][,ELEMENT1[(para1)]][,…][,ELEMENTN[(paraN)]]
}
- 必選項:
enumName
是枚舉類的名稱。 - 必選項:
ELEMENT0
是枚舉類的常量,一般采用大寫英文字母,枚舉類至少要包含一個常量。 - 可選項:
[(para:Type)]
定義了元素參數的名稱和類型,多個 para:Type 之間使用逗號分隔。para0 是元素參數的名稱,Type是元素參數的類型。 - 可選項:
[(para0)]
是元素的參數,其類型與 [(para:Type)] 定義的類型一致,多個 *para0* 之間使用逗號分隔。 - 可選項:
[,ELEMENT1[(para1)]][…][,ELEMENTN[(paraN)]]
表示多個枚舉類的常量。
1. 枚舉類的常用屬性屬
類型 | 方法 |
---|---|
Class | declaringClass 返回與此枚舉常量的枚舉類型相應的Class對象 |
String | Name 返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明 |
Int | Ordinal 返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零) |
2. 枚舉類的常用方法
類型 | 方法 |
---|---|
Int | compareTo(other:E) 比較此枚舉與指定對象的順序 |
String | toString() 返回枚舉常量的名稱 |
示例
enum class Color constructor(var RGB: String,var value: String) {RED("#ff0000", "紅色"), YELLOW("#ffff00", "黃色"), BLUE("#0000ff", "藍色")
}val colorSelect = Color.BLUE
println("選取顏色的名稱:" + colorSelect.value) //選取顏色的名稱:藍色
println("選取顏色的RGB值:" + colorSelect.RGB) //選取顏色的RGB值:#0000ff
十、泛型
1. 泛型類
泛型類是指聲明類時同時聲明泛型的類,聲明類時在類名后添加 <>
聲明泛型,<>
內可以聲明多個泛型,多個泛型之間使用逗號分隔。
語法格式
class ClassName <Type[:Any]> {statement
}
- 必選項:
ClassName
是泛型類的名稱。 - 必選項:
Type
是泛型,可以作為類內部的數據類型。 - 可選項:
[Any]
表示非空泛型,即 T 可以是除 null 外的任何類型。
聲明泛型類實例的變量時,<Type>
中的 Type
需要替換成相應的類型。如果省略 <Type>
,會自動判斷傳人參數的數據類型。
語法格式
var|val instanceName[:ClassName<Type>] = ClassName ([para])
- 必選項:
instanceName
是類的實例名。 - 必選項:
ClassName
是類名。 - 可選項:
[:ClassName<Type>]
用于指定泛型的數據類型,Type 是數據類型 - 可選項:
[para]
是調用主構造方法或次構造方法的參數。
2. 泛型接口
泛型接口是指聲明接口時同時聲明泛型,聲明接口時在接口名稱后添加 <>
聲明泛型,<>
內可以聲明多個泛型,多個泛型之間使用逗號分隔。
語法格式
interface InterfaceName<Type[:Any]> [: ParentInterfaceName] {statement
}
- 必選項:
InterfaceName
是泛型接口的名稱。 - 必選項:
Type
是泛型,可以作為接口內部的數據類型。 - 可選項:
[:Any]
表示非空泛型,即 T 可以是除 null 外的任何類型。 - 可選項:
[:ParentInterfaceName]
是要繼承的接口名稱。
類實現接口時,需要使用:運算符
,可以同時實現多個接口。實現接口的類必須重寫抽象屬性和象方法。
語法格式
class ClassName <Type [:?ny]>:InterfaceName<Type>{statement
}
- 必選項:
ClassName
是實現泛型接口的類名稱。 - 必選項:
Type
是泛型。 - 必選項:
InterfaceName
是實現泛型接口的名稱。 - 可選項:
[:Any]
表示非空泛型,即 T 可以是除 null 外的任何類型。
3. 泛型方法
泛型方法是指聲明方法的同時聲明泛型,聲明方法時在 fun
關鍵字后添加 <>
聲明泛型,<>
內可以聲明多個泛型,多個泛型之間使用逗號分隔。
語法格式
fun<Type[:Any]> functionName ([para: ParaType])[:ReturnType] {statement
}
- 必選項:
Type
是泛型。 - 必選項:
functionName
是方法的名稱。 - 可選項:
[:Any]
表示非空泛型,即 T 可以是除 null 外的任何類型。 - 可選項:
[para:ParaType]
是參數,多個參數之間使用逗號分隔。 - 可選項:
[:ReturnType]
是返回值的類型。
十一、異常處理
當 try
語句內的 statement1
語句體出現異常時,則通過 catch
語句捕獲相應類型異常后執行 statement2
語句體,無論是否存在異常最后都執行 finally
語句內的 statement3
語句體。try
語句和 catch
語句不能單獨使用,一個 try
語句可以搭配多個 catch
語句以捕獲多種不同類型的異常進行不同的處理。
語法格式
try {statement1
} catch (exceptionName:Exception) {statement2
}[ finally {statement3
}]
- 必選項:
Exception
是需要捕獲的異常類型。 - 必選項:
exceptionName
是捕獲的異常實例 - 可選項:
[finally{statement3)]
語句無論異常是否被捕獲都會被執行。即使 catch 語句中執行了return 語句或 break 語句,finally 語句內的語句依然會被執行。