Kotlin語法整理

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 關鍵字時,根據 startIntendInt 的大小自動判斷循環結束后加上或減去 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 對應 intArrayOfarrayOf 是固定的關鍵字。
  • 可選項[:Array<dataType>] 是數組的數據類型,默認時會根據元素的初始值自動判斷數據類型。
  • 可選項element0,element1,…,elementN 是每個元素的初始值,每個元素的數據類型必須一致。

3. 空數組

可以使用 emptyArray<dataType>() 方法創建空數組。要使用數組時,需要使用 arrayOftypeArrayOf 語句對數組進行初始化,或者賦值一個非空數組,才能對元素進行操作。

語法格式

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、…、paraNLambda 表達式的參數。
  • 可選項type0、type1、…、typeNLambda 表達式參數的數據類型。

七、類

(一) 類的聲明

Kotlin 提供了大量的內置類來實現各項基本功能,也可以使用 class 關鍵字聲明自定義類。類中一般包含主構造方法、初始化塊、次構造方法、屬性和方法。 主構造方法在類名后使用 constructor 關鍵字定義,可以省略。初始化塊使用 init 關鍵字,不能添加參數。次構造方法在類內部使用 constructor 關鍵字定義,可以添加參數。屬性(即成員變量)使用 varval 關鍵字在類內部的構造方法和方法外直接聲明。方法是指類中的函數,方法和函數在定義時只有是否在類內部的區別。

語法格式

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] 是主構造方法的可選參數,多個參數之間使用逗號分隔。如果使用 varval 聲明參數,則會被自動轉換為類的屬性,否則只能使用在初始化塊內。
  • 可選項[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] 提供返回值。

(二) 創建類的實例

類不能直接使用,需要通過類的實例來使用,使用 varval 聲明類實例的變量。聲明類變量的同時還可以進行實例化,實例化后才能通過實例的變量調用類的屬性和方法。

語法格式

//聲明類實例的變量
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
  • 必選項valueget() 方法的返回值,即調用屬性的返回值。
  • 必選項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 是類的名稱。
  • 必選項ParentClassNameClassName 類繼承的父類名稱。

(六) 包

包 ( 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. 枚舉類的常用屬性屬

類型方法
ClassdeclaringClass
返回與此枚舉常量的枚舉類型相應的Class對象
StringName
返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明
IntOrdinal
返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零)

2. 枚舉類的常用方法

類型方法
IntcompareTo(other:E)
比較此枚舉與指定對象的順序
StringtoString()
返回枚舉常量的名稱

示例

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 語句內的語句依然會被執行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918593.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918593.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跨平臺低延遲的RTMP推流播放在無紙化會議與智慧教室的技術設計和架構實踐

?? 引言&#xff1a;讓每一塊屏幕“同頻”的核心技術 無紙化會議與智慧教室&#xff0c;正在從“輔助工具”走向“核心基礎設施”&#xff0c;成為政企數字化與教育信息化建設的標配。它們的核心訴求并不只是替代紙質文檔或黑板&#xff0c;而是要在多終端、多地點、多網絡環…

最優擴展大型語言模型測試時計算量可能比擴展模型參數更有效

摘要 通過增加測試時計算量使大型語言模型&#xff08;LLMs&#xff09;提升輸出效果&#xff0c;是構建能基于開放自然語言自主改進的通用智能體的重要步驟。本文研究LLMs推理階段計算量的擴展規律&#xff0c;重點回答以下問題&#xff1a;若允許LLM使用固定但可觀的推理階段…

GPT5評測對比與使用

經過長達一年的技術迭代&#xff0c;OpenAI正式推出GPT-5系列模型&#xff0c;包含GPT-5&#xff08;標準版&#xff09;、GPT-5-mini&#xff08;輕量版&#xff09;和GPT-5-nano&#xff08;極簡版&#xff09;三個版本&#xff0c;定價策略保持統一。本次升級在性能、效率與…

Git與CI/CD相關知識點總結

Git與CI/CD相關知識點總結 1. Git對象模型與存儲機制 1.1 Git對象類型 Commit對象&#xff1a;包含提交信息、作者、時間、父commit引用、樹對象引用Tree對象&#xff1a;描述目錄結構和文件引用Blob對象&#xff1a;實際的文件內容 1.2 存儲機制特點 增量存儲&#xff1a;每次…

CS2服務器是何方神圣

CS2服務器是何方神圣CS2「子刷新頻率」深度拆解&#xff1a;從官方宣言到“吞子彈”真相00 先給結論01 官方原話到底說了什么02 一條時間線看懂「Sub-tick」03 技術解剖&#xff1a;Sub-tick 的實現細節3.1 輸入包結構&#xff08;Valve 公開源碼節選&#xff09;3.2 連續積分&…

Docker守護進程安全加固在香港VPS環境的操作標準

Docker守護進程安全加固在香港vps環境的操作標準隨著云計算技術的普及&#xff0c;Docker守護進程安全加固已成為香港VPS環境中不可忽視的重要環節。本文將系統性地介紹如何通過配置優化、訪問控制、網絡隔離等維度&#xff0c;在香港虛擬私有服務器上建立符合企業級安全標準的…

Rust 項目編譯故障排查:從 ‘onnxruntime‘ 鏈接失敗到 ‘#![feature]‘ 工具鏈不兼容錯誤

Rust 項目編譯故障排查報告&#xff1a;從原生庫鏈接失敗到工具鏈不兼容 場景: 編譯一個本地 Rust 項目時遇到連續的編譯錯誤。一、 故障現象概述 在對一個 Rust 項目執行 cargo build 命令時&#xff0c;先后遇到了兩個不同性質的編譯錯誤&#xff0c;導致編譯流程中斷。初始錯…

K8s 1.32.6版本部署文檔

主機配置 作用IP地址操作系統配置關鍵組件k8s-master172.16.1.30Rocky Linux release 94C/4G/50GBkube-apiserver, etcd,dockerk8s-node1172.16.1.31Rocky Linux release94C/4G/50GBkubelet, kube-proxy,dockerk8s-node2172.16.1.32Rocky Linux release 94C/4G/50GBkubelet, k…

第十六屆藍橋杯大賽青少組 C++ 省賽真題解析(2025年8月10日)

第一題 題目:運行以下程序,輸出的結果是()。 #include<bits/stdc++.h> using namespace std; int func(int y) { y -= 5; cout << "x"; return 0; } int main() { int x = 10, y = 5; if (x > y || func(y)) cout &…

PID 控制算法 | stm32 直流電機控制

注&#xff1a;本文為 “PID 算法 | stm32 直流電機控制” 相關合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未全校去重。 如有內容異常&#xff0c;請看原文。 STM32—PID 控制在直流電機中的應用 Aspirant-GQ 于 2020-04-28 23:23:39 發布 一、PID 控制算法 1…

高效的Python課表生成器

在日常的學校管理中,排課表是一項繁瑣而又必須完成的工作。特別是對于那些沒有自動化排課系統的學校來說,手動安排學生的課程不僅耗時,而且容易出錯。最近,我接到了一項任務,需要為學校的學生安排非選修課的課程表。以下是我使用Python編寫的解決方案,并結合了一些實際的…

深度學習-卷積神經網絡-NIN

網絡結構是卷積神經網絡&#xff08;CNN&#xff09;發展的關鍵。其中&#xff0c;網絡結構的改進至關重要。本文將介紹一種具有創新意義的卷積神經網絡——NIN&#xff08;Network in Network&#xff09;。LeNet、AlexNet和VGG都有一個共同的設計模式&#xff1a;通過一系列的…

Java-96 深入淺出 MySQL 索引與排序機制詳解與優化實踐 Filesort

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-31- 千呼萬喚始出來 GPT-5 發布&#xff01;“快的…

MLAG雙活網絡妙招:BGP + 靜態VRRP實現智能負載均衡

引言 在現代數據中心和企業網絡架構中&#xff0c;高可用性和負載均衡是核心需求。MLAG&#xff08;Multi-Chassis Link Aggregation&#xff09;技術結合BGP和靜態VRRP的解決方案&#xff0c;為網絡工程師提供了一種高效實現雙活網絡負載均衡的妙招。本文將深入探討這一技術組…

如何構建PHP表單頁面及驗證相關原理(PHP基礎)

文章目錄PHP表單 - 必需字段PHP - 必需字段PHP - 顯示錯誤信息總結PHP表單 - 驗證郵件和URLPHP - 驗證名稱PHP - 驗證郵件驗證URLPHP 完整表單實例 PHP表單 - 必需字段 該章內容將介紹如何設置表單必需字段及錯誤信息 PHP - 必需字段 我們首先給出一個表的驗證規則&#xff0c;…

API如何集成Web搜索功能:原理、實踐與最佳選型

API如何集成Web搜索功能&#xff1a;原理、實踐與最佳選型 在現代智能應用開發中&#xff0c;模型生成結果往往需要融合最新的互聯網信息。通過集成Web搜索工具&#xff0c;模型可以在生成響應前主動檢索網絡&#xff0c;獲取實時數據。這一能力極大提升了智能系統的準確性和時…

Spring Boot項目中調用第三方接口

目錄 步驟1: 添加依賴 步驟2: 配置HTTP客戶端 配置RestTemplate 配置WebClient 步驟3: 在Service層調用接口 使用RestTemplate示例 使用WebClient示例 步驟4: 在Controller層調用Service 注意事項 總結 Spring Boot項目中調用第三方接口 在Spring Boot項目中調用第三…

關系型數據庫:原理、演進與生態全景——從理論基石到云原生的深度巡禮

目錄 一、引言&#xff1a;當“表”成為世界的通用語言 二、理論基石&#xff1a;關系模型與 ACID 三、引擎架構&#xff1a;一條 SQL 的奇幻漂流 四、存儲機制&#xff1a;頁、緩沖池與 WAL 五、并發控制&#xff1a;鎖、MVCC 與隔離級別 六、SQL&#xff1a;聲明式語言…

【軟考架構】計算機網絡中的IP地址表示和子網劃分

在計算機網絡中&#xff0c;IP地址用于唯一標識網絡中的設備。IP地址的表示方式有兩種&#xff1a;IPv4和IPv6。IPv4是當前使用最廣泛的地址格式&#xff0c;而IPv6是為了解決IPv4地址耗盡問題而設計的。 1. IPv4地址 IPv4地址是一個32位的數字&#xff0c;通常用四個十進制數表…

【后端】Spring @Resource和@Autowired的用法和區別

以下是關于 Resource 和 Autowired 兩個依賴注入注解的詳細對比說明&#xff0c;重點關注它們的區別和使用場景&#xff1a;&#x1f4cc; 核心區別總結特性Autowired (Spring)Resource (JSR-250 標準)來源Spring 框架原生注解Java 標準 (javax.annotation)默認注入方式按類型 …