2017-11-09 3 views
0

문제가 발생하여 문제가 발생합니까?서로 다른 try 문을 실행하고 있습니까?

예 :

try { 
    File Reader fileReader = new FileReader(blah); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 

    // while-statement -- extract information from blah 

    try { 
      File Reader fileReader2 = new FileReader(blah2); 
      BufferedReader bufferedReader2 = new BufferedReader(fileReader2); 

      // while-statement -- extract information from blah2 
     } catch (FileNotFoundException ex) { 
      // Display FileNotFound stuff 
     } catch (IOException ex) { 
      // Display IOException stuff 
     } 
    } catch (FileNotFoundExcpetion ex) { 
     // Display FileNotFound stuff 
    } catch (IOException ex) { 
     // Display IOException stuff 
    } 
} 

이 문제가되는 경우를

, 나에게 어떤 다른 방법을 찾아야한다?

+0

'FileNotFoundException'은'IOException'의 하위 유형이므로 다른 유형의 'catch'블록이 별도로 필요하지 않을 수 있습니다. 물론, 당신이'FileNotFoundException' 후에 다르게 행동하기를 원하지 않는 한. –

답변

0

이 예제에서는 새로운 try 문을 시작할 이유가 없습니다. 왜하지?

try { 
    File Reader fileReader = new FileReader(blah); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 

    File Reader fileReader2 = new FileReader(blah2); 
    BufferedReader bufferedReader2 = new BufferedReader(fileReader2); 

} catch (FileNotFoundExcpetion ex) { 
    // Display FileNotFound stuff 
} catch (IOException ex) { 
    // Display IOException stuff 
} 

아니요, 문제가되지 않습니다. 그것은 단지 나빠 보인다. 그러나 때때로 나는 추측 할 필요가 있었다.

0

try-catch가 너무 많으면 코드가 복잡해지며 코드 가독성이 낮아져 swallowing an exception이되며 성능 문제보다 훨씬 심각합니다. 예기치 않게 시스템이 손상 될 수 있습니다.

다음은 swallowing an exception의 예이며 그 부작용 (복수 지점 오류는 NPE 등)입니다.

public static void main(String[] args) { 
    String dataFromFile = null, dataFromDataBase = null; 
    try { 
    try { 
     dataFromFile = readFile(); 
    } catch (IOException e) { 
     // ignore exception 
     // String dataFromFile will be set to null 
     // as there was an exception 
    } 
    // imagine many lines of code here 
    dataFromDataBase = readDatabase(dataFromFile.getKey()); 
    } catch (IOException e) { 
    // ignore exception 
    } 

    // imagine many lines of code here 
    System.out.println(dataFromFile.replace(" ", "")); 
    //imagine many lines of code here 
    System.out.println(dataFromDataBase.getKey()); 
} 
private static String readFile() throws IOException { 
    // throws ioexception 
} 
private static String readDatabase(String key) throws IOException { 
    // throws ioexception 
} 

당신은 하나의 시도 - 캐치로 다음 클럽 그 예외를 발생하고 적절하게 처리 할 수있는 하나의 방법으로 여러 지점을 기대합니다. 다시 한 번이 특정 질문에 예외가있을 수 있지만 항상 단일 시도에서 여러 try-catch를 줄이기 위해 노력해야합니다.

예외가있는 특정 작업을 수행하지 않는 한 단일 예외 절을 사용하여 모든 예외 및 로그 정보를 처리하거나 호출자에게 던져서 고유 한 특정 방식으로 처리합니다.

try { 
    File Reader fileReader = new FileReader(blah); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 

    // while-statement -- extract information from blah 

    File Reader fileReader2 = new FileReader(blah2); 
    BufferedReader bufferedReader2 = new BufferedReader(fileReader2); 

    // while-statement -- extract information from blah2 

    } catch (Exception ex) { 
     // Display Exception stuff details 
    } 
} 
관련 문제