kotlin中的空指標檢查問題

2022-10-06 23:36:14 字數 1120 閱讀 9410

android系統上崩潰率最高的異常型別就是空指標異常。

我們需要知道的是:空指標是一種不受程式語言檢查的執行時異常,只能有程式設計師主動通過邏輯判斷來避免。

舉個例子,對於一段簡單的呼叫引數的j**a**,我們要使**安全性更高,更穩妥的做法就是再呼叫引數的方法之前先進行乙個判空處理。如下:

public void dostudy(study study)

相較於j**a,kotlin非常科學的解決了這個問題,它利用編譯時判空檢查的機制基弧杜絕了空指標異常。雖然編譯時判空機制有時候導致**更難書寫,但kotlin提供的多種輔助工具可以很好的處理各種判空情況

在類名的後面加上乙個問號,例如int表示不可為空的整形,而int?就表示可為空的整形。

?.操作符

對於上面的dostudy()函式,如果我們希望傳入的引數可以為空,那麼就可以如下進行實現:

fun main()

fun dostudy(study:study?)

?:操作符

這個操作符左右兩邊都接收了乙個表示式,當左邊表示式的結果不為空則返回左邊表示式的結果,否則就返回右邊表示式的結果

舉例如下:

var m:string?="hello"

var m2:string?=null

fun main()

/*上面這段**中的 var c1=m2?:m 等價於如下**:

val c=if(m2!=null)

else

*/

!!.操作符

當我們在main( )函式裡先進行一次判空操作,裡面呼叫乙個函式。此時我們是無法通過編譯的,因為呼叫的函式並不知道外部已經進行了非空檢查,在呼叫函式時依舊認為這裡面存在空指標風險,從而無法編譯通過

這種情況下,我們想要強行通過編譯,就可以使用非空斷言工具,寫法是在物件的後面加上!!,如下所示:

var m:string?="hello"

fun main()}​

fun printuppercase()

需要注意的是這是一種有風險的寫法,意在告訴kotlin,我非常確信這裡的物件不會為空,所以不需要繼續執行空指標檢查;如果出現問題kotlin可以直接丟擲異常,後果由我自己承擔。

Kotlin新手入坑 空指標檢查 ST

變數延遲初始化 lateinit 抓住今天,盡可能少的信賴明天。喝湯能補 如果進行過android專案開發者,經常會遇到空指標的問題,雖然解決方法不難,但是這個問題經常會導致程式崩潰,對應的到生活中口袋就瘦了。kotlin預設所有的引數和變數都是不可為空的。當然也提供了一套可空的型別系統。上 fun...

空指標異常的問題

空指標異常 這個異常屬於 runtimeexception 的子類,所以編譯的時候感覺沒啥問題,一執行崩潰了。為啥會出現這個異常,下面是我的個人理解。原因 當乙個物件不存在 即物件 null 時,呼叫方法或者變數會出現空指標異常。具體原因是,當物件為null時,堆記憶體存放物件屬性為空,而使用方法時...

討論啟發靈感 重繪中的空指標異常問題

idea 今天做了簡單畫圖板,要重繪乙個物件類的陣列,出現了乙個空指標問題 還沒對物件類的陣列進行例項化,就重繪啦,而重繪中有用到那個陣列,因而出現了空指標異常。在同學的啟發下,我覺得在重繪方法中,使用陣列前先對陣列進行初始化,關鍵來啦,初始化時,對其引數進行設定,比如type 1 我們不使用的型別...