在完成實驗的過程中,見到了從未見過的異常:nosuchelementexception。
使用情況是方法a呼叫方法b,也呼叫方法c,在b和c中都使用了scanner,並且都進行了關閉。情況和下面的情況大致相同。
public
class
testscanner
public
void
method1()
public
void
method2()
}
錯誤提示如圖所示:
查閱部落格()之後得知,是因為system.in是靜態的,當前類中所有system物件共享,在使用close()方法時,會同時關閉scanner和system.in,而system.in關閉後嘗試再次開啟得到的值是-1,當第二個函式再次想例項化scanner時就會丟擲nosuchelementexception異常。
在中「it學習者-螃蟹」的講解中,看到了這樣一段原始碼:
在scanner 的readinput方法裡面有以下**:
trycatch
(ioexception ioe)
if(n ==-1
)scanner的next方法中有以下**:
if(needinput)
readinput()
;else
throwfor()
;throwfor中的部分**:
skipped =
false;if
((sourceclosed)
&&(position == buf.
limit()
))throw
newnosuchelementexception()
;else
throw
newinputmismatchexception()
;
梳理一下這個過程:第一次呼叫method1時,將inscanner關閉,同時也關閉了system.in,因為這個是靜態的,所以在這個類中,就被徹底關閉了。之後method2嘗試利用其進行讀入,因為已經關閉,則讀到-1,設定sourceclosed = true;
needinput = false。之後執行throwfor(),position 是當前讀取的內容在緩衝區中位置,因為讀取的是-1,因此position =0,而buf.limit()也等於0,因此就執行了throw new nosuchelementexception()。
軟體構造回顧(二)
在學習軟體構造這門課時,我們接觸到了設計模式這個概念,在最開始的學習過程中,由於沒有用到過這些模式,所以並不能接受這些模式中的各種關係和其本身的意義,但是,在經過了學習與實踐之後,我就能夠淺略地了解這些模式的內容了。這是最先講的模式,可以採用乙個模擬的思想去理解這個模式的含義 在生活中不同國家的用電...
實驗二 認識Packet Tracer軟體
一 packet tracher介紹 二 實驗任務 1 安裝packer tracer 2 利用一台型號為2960的交換機將2pc機互連組建乙個小型區域網 3 分別設定pc機的ip位址 4 驗證pc機間可以互通。三 實驗裝置 switch 2960 1臺 pc 2臺 直連線 四 實驗拓撲圖 五 實驗...
軟體工程實驗 實驗二 測試
一.實驗目的 採用黑盒測試法設計測試方案,用c語言程式設計,對該程式功能進行測試。二.實驗內容 三角形分類程式的功能是 輸入三角形的三條邊 3個整數 判斷是否能構成三角形,如能,則輸出是等邊 等腰和任意三角形的資訊。三 實驗 include 藍多多軟體工程實驗 二 using namespace s...