本文目錄一覽:
java問題
這裡直接把s賦值給readContent是有問題的,問題點如下:
假設文件有兩行
第一行
第二行
則讀取循環兩次,第一次s賦值給readContent,readContent的值為 “第一行”,然後又循環,讀取第二行,再次賦值,則readContent就會變成 “第二行”,第一行的值就丟失了;
這裡StringBuff的作用是把讀取到的內容連接起來成為一個字符串;
不過這裡的例子的確有問題,問題卻不在StringBuffer上,而在 s 變量上,s中間兩步是不必要的,循環內直接改成如下形式:
刪除s.getBytes()和new String
另外,除了以上問題,來總結下這段代碼的問題吧:
1、文件資源沒有釋放
2、在不涉及多線程的情況下,應使用StringBuilder類進行字符串拼接,而不是StringBuffer,因為StringBuilder更快(但是StringBuilder線程不安全,StringBuffer線程安全);
3、異常處理有問題,如果出現IO異常,就返回異常信息的字符串?那麼如何區分這個字符串是發生了異常還是從文件中讀取到的內容呢?這裡不應該返回字符串,而是直接聲明異常,有異常就向外拋,直到能處理的頂層程序處理。
基於以上幾點,修改代碼如下:
注意第27行,聲明本方法可能拋出 IOException 異常,稍後主程序將進行處理。另外注意第30行,創建InputStreamReader 的時候指定了文件編碼為utf8,以避免亂碼,你的文件如果存儲的是其他編碼類型,則會出現亂碼。
調用代碼如下:
getContent函數調用主程序
注意18行和21行,是分別處理正常情況和異常情況,當讀取異常時,將會調用第21行,打印異常信息;
整體代碼如下:
全部代碼
接下來我們看看代碼執行情況。
1、當我們要讀的文件不存在時,執行結果如下:
我們要讀的文件不存在時,拋出異常
看,當文件不存在時,拋出異常,並由異常處理程序捕獲和打印,你可以看到具體哪一行代碼出錯[getContent(App.java:29)],說明在App.java 文件中的getContent方法,文件的29行出錯。
2、那麼正常情況下呢?當然是輸出文件內容了,我們放一個有如下內容的文件在”D:\\file.txt”處:
要讀取的文件內容
執行結果如下:
正常情況下,輸出文件內容
最後,我不知道你看的是什麼書,是不是課本,但感覺質量不高,這裡給你推薦幾本,可以買來看看:
1、Head First java
2、菜鳥教程 Java
3、最權威的,自然是The Java® Language Specificati了
祝你學習之路順利
解答一下有關JAVA異常類的問題?
問題(1)可以改為Exception
問題(2)示情況而定是否可以改為IOException
原因,原語句中的try…catch..的語義是在try裡面的兩行語句中捕獲可能拋出的DangerException異常並加以處理,
(1). Exception是DangerException的父類,替換後語義變為了在try裡面的兩行語句中捕獲可能拋出的Exception異常並加以處理,語義是正確的;
(2). IOException不確定是不是DangerException的父類,替換後語義變為了在try裡面的兩行語句中捕獲可能拋出的IOException異常並加以處理,語義不一定正確,如果IOException是DangerException的父類,就是正確的,否則是錯誤的(在try裡面沒有IOException的類型可能被拋出),在編譯時會報錯(Exception ‘java.io.IOException’ is never thrown in the corresponding try block)
關於JAVA問題的解答
第1題 :下面哪個對類的聲明是錯誤的? (A),Java中沒有多繼承,C++有多繼承,Java只能多實現多個接口;
第2題 某一個子類要繼承一個父類,要使用關鍵字(extends )。
第3個題:下列說法正確的有( C)Java中new 的時候執行構造方法,至於執行哪一個看你new的哪一個構造方法
第4題:有以下方法的定義,請選擇該方法的返回類型( D)。java會自動向上轉型, (short) x/y*2;這個short強制轉型只是轉了x,並不是轉了結果
第5題:在方法內部使用,代表對當前對象自身引用的關鍵字是( this)。Java中this是對自己的引用,super向上調用
第6題:以下關於繼承的敘述正確的是(A )。在Java中類只允許單一繼承
第7題:一個非抽象子類,如果要實現某個接口,則( A)。必須實現該接口中的所有抽象方法
第8題:哪個關鍵字可以拋出異常? ( throw)。catch中用throw;方法上用throws
第9題:關於以下代碼段的說法正確的是( D)。這個雖然可以執行成功但是如果你要去判斷相等的話得到時false,string和StringBuffer有着本質的不同,一個不可變一個可變
第10題:下面關鍵字中,哪一個不是用於異常處理語句( break )。 break用於跳出循環
原創文章,作者:JSHSL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129517.html