java異常處理筆記

qking93415981發表於2020-04-06

一些印象不是很深刻的東東

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取代
           }
    }
}

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");
    }
  }
}

注:dispose()不要放在finalize()中,因為finalize是否會被呼叫以及什麼時候呼叫你都不知道!

3、異常的匹配
a、丟擲的派生類異常能被基類捕捉

4、原則
"除非知道該怎樣去處理異常,否則別去捕捉"


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章