java異常處理筆記
一些印象不是很深刻的東東
1、finally
a、就算try裡面有catch沒有捕獲到的異常,finally也會被執行!
b、java異常處理的bug
public class LostMessage(){
void f() throws VeryImportantException{
throw new VeryImportantException();
}
void dispose() throws HoHumException{
throw new HoHumException();
}
public static void main(String [] args) throws Exception{
LostMessage lm = new LostMessage();
try{
lm.f();
}finally{
lm.dispose();
//VeryImportantException 消失了,被HoHumException取代
}
}
}
void f() throws VeryImportantException{
throw new VeryImportantException();
}
void dispose() throws HoHumException{
throw new HoHumException();
}
public static void main(String [] args) throws Exception{
LostMessage lm = new LostMessage();
try{
lm.f();
}finally{
lm.dispose();
//VeryImportantException 消失了,被HoHumException取代
}
}
}
2、加在異常上面的限制
a、覆寫方法的的時候,你只能丟擲這個方法在基類中的版本所宣告的異常。[多型]
b、派生類可能以任何方式呼叫基類的建構函式,派生類的建構函式不能捕捉到基類建構函式的任何異常,所以派生類也必須顯式宣告基類可能丟擲的任何異常
c、基類方法丟擲異常,但是在派生類覆蓋該方法時中可以不丟擲異常
d、開啟檔案一個方法,FileNotFoundException 在new 時丟擲。可以判斷檔案打沒開啟,[注意建構函式]
class InputFile {
private BufferedReader in;
public InputFile(String fname) throws Exception {
try {
in = new BufferedReader(new FileReader(fname));
// Other code that might throw exceptions
} catch(FileNotFoundException e) {
System.err.println("Could not open " + fname);
// Wasn't open, so don't close it
throw e;
} catch(Exception e) {
// All other exceptions must close it
try {
in.close();
} catch(IOException e2) {
System.err.println("in.close() unsuccessful");
}
throw e; // Rethrow
} finally {
// Don't close it here!!!
}
}
public String getLine() {
String s;
try {
s = in.readLine();
} catch(IOException e) {
throw new RuntimeException("readLine() failed");
}
return s;
}
public void dispose() {
try {
in.close();
System.out.println("dispose() successful");
} catch(IOException e2) {
throw new RuntimeException("in.close() failed");
}
}
}
private BufferedReader in;
public InputFile(String fname) throws Exception {
try {
in = new BufferedReader(new FileReader(fname));
// Other code that might throw exceptions
} catch(FileNotFoundException e) {
System.err.println("Could not open " + fname);
// Wasn't open, so don't close it
throw e;
} catch(Exception e) {
// All other exceptions must close it
try {
in.close();
} catch(IOException e2) {
System.err.println("in.close() unsuccessful");
}
throw e; // Rethrow
} finally {
// Don't close it here!!!
}
}
public String getLine() {
String s;
try {
s = in.readLine();
} catch(IOException e) {
throw new RuntimeException("readLine() failed");
}
return s;
}
public void dispose() {
try {
in.close();
System.out.println("dispose() successful");
} catch(IOException e2) {
throw new RuntimeException("in.close() failed");
}
}
}
注:dispose()不要放在finalize()中,因為finalize是否會被呼叫以及什麼時候呼叫你都不知道!
3、異常的匹配
a、丟擲的派生類異常能被基類捕捉
4、原則
"除非知道該怎樣去處理異常,否則別去捕捉"
相關文章
- Java中的異常處理(隨堂筆記)Java筆記
- JAVA 異常處理Java
- Java 異常處理Java
- JAVA異常處理Java
- swoft 學習筆記之異常處理筆記
- 筆記:異常處理之report與render筆記
- JAVA_異常處理Java
- Java 異常表與異常處理原理Java
- Java 筆記《異常》Java筆記
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- Java異常處理(非常全面)Java
- Java異常處理機制Java
- 重學Java - 異常處理Java
- Django筆記三十一之全域性異常處理Django筆記
- 異常篇——異常處理
- Java 的異常處理機制Java
- Java之異常處理try{}catch(){}Java
- Java進階02 異常處理Java
- JAVA學習之異常處理Java
- java異常的處理機制Java
- Java 異常處理:使用和思考Java
- 記錄Laravel異常處理類Laravel
- java學習筆記(異常)Java筆記
- 異常處理
- Java學習筆記-Day21 Java System類、Class類、內部類、異常處理Java筆記
- Java異常處理12條軍規Java
- Java入門教程十一(異常處理)Java
- 甩鍋(throws)_ java異常(Exception)處理JavaException
- Java 中的異常處理機制Java
- [轉載] Java異常處理習題Java
- 異常處理 - Go 學習記錄Go
- JSP 異常處理如何處理?JS
- 異常-throws的方式處理異常
- React 異常處理React
- JS異常處理JS
- oracle異常處理Oracle
- Python——異常處理Python
- Python異常處理Python