位元組流寫資料一共有兩種方式
-
throws直接拋出例外
-
try...catch進行例外處理,在位元組流中因為考慮到需要釋放資源,要在此基礎上加入finally塊進行釋放資源
finally:在例外處理時提供finally塊來執行所有的清楚操作,比如說IO流中的close()方法,釋放資源
特點:被finally控制的陳述句一定會執行,除非被JVM退出
標準格式:
try{
可能出現例外的代碼;
}catch(例外類名 變數名){
例外的處理代碼;
}finally{
執行所有清除操作;
}
代碼演示:
/*位元組流寫資料加例外處理
* */
public class Demo01 {
public static void main(String[] args) {
//try...catch..finally例外處理
//初始化檔案物件
FileOutputStream fops =null;
try {
fops = new FileOutputStream("E:\\abc.txt");
fops.write("123".getBytes());
?
}catch (IOException e){
e.printStackTrace();
}finally {
try {
fops.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
?
位元組流例外需要注意的問題:
像上面這種處理情況一般來說不會出現錯誤,但是如果我們將路徑的E盤換成一個根本就不存在的盤之后進行測驗的話我們想要看到的情況是在控制臺拋出一個例外,提示找不到此路徑,但實際上它拋出了兩個例外:
1.java.io.FileNotFoundException: M:\abc.txt (系統找不到指定的路徑,)
2.Exception in thread "main" java.lang.NullPointerException
at Demo040601.Demo01.main(Demo01.java:21)
?
第一個例外就是我們所需要的例外提示,但第二個空指標是怎么出現的呢?我們點擊這個例外后發現原來它提示是 fops.close()釋放資源時出了問題,在代碼中查找了一下發現了問題:
我們在創建位元組流物件時將它初始化成了null,那么在我們給了一個根本不存在的存盤盤后,計算機找不到這個路徑下的檔案,那么try里面的代碼就不能夠被執行,那么fops這個物件就是一個null值的狀況走到了finally,再呼叫一個close方法,自然就會報空指標例外
所以,為了解決這個問題和保證程式的健壯性我們需要在finally中進行判斷fops是否為空
/*位元組流寫資料加例外處理
* */
public class Demo01 {
public static void main(String[] args) {
//try...catch..finally例外處理
//初始化檔案物件
FileOutputStream fops =null;
try {
fops = new FileOutputStream("M:\\abc.txt");
fops.write("123".getBytes());
?
}catch (IOException e){
e.printStackTrace();
}finally {
if (fops != null) {//fops為空時,不進行釋放資源
try {
fops.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
這樣,我們就很好地解決了空指標例外問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456981.html
標籤:Java
下一篇:性能優化,實踐淺談
