2013-09-12 7 views
-6

Внутри первого блока catch почему мы не можем выбросить объект Exception? Здесь RuntimeException работает нормально.Невозможно бросить Исключение, почему?

public class CirEx { 
    public Circle getCircle(int id) { 
     Connection conn = null; 
     try { 
      Class.forName(""); 
      conn = DriverManager.getConnection(""); 
      PreparedStatement pstmt = conn.prepareStatement(""); 

      Circle circle = new Circle(1, ""); 
      return circle; 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
      // why we cann't do that. 
      // throw new Exception(e); 
     } finally { 
      try { 
       conn.close(); 
      } catch (SQLException e) { 
       System.out.println(e); 
      } 
     } 
    } 
} 
+6

Пожалуйста, используйте заголовок, чтобы описать фактическую проблему. –

+0

http://stackoverflow.com/questions/3779285/exception-thrown-in-catch-and-finally-clause – GGrec

+0

Это плохо сформированный вопрос (из-за названия), и на самом деле проблема с этим не возникает код вообще. –

ответ

1

Мы можем бросить Exception, если мы объявить метод бросить один и тот же (пункт throws Exception) Exception или обрабатывать его (с использованием try catch блока).

Exception является проверил исключение и они должны быть обработаны

но

RuntimeException работает, потому что его непроверенной Exception и для этого не нужно иметь пункт throws или обрабатывать его

See Checked vs Unchecked Exception

+0

Вам не нужно объявлять исключения во время выполнения. –

+0

Я упомянул об этом в сообщении? почему downvote? – sanbhat

+0

Я просто хочу знать причину моей концепции, поэтому я задал этот вопрос. – Abhi

-2

Потому что в tha В этом случае вам придется объявить ваш метод, что он выбрасывает исключение.

public Circle getCircle(int id) throws Exception{ 
Connection conn = null; 
try { 
    Class.forName(""); 
    conn = DriverManager.getConnection(""); 
    PreparedStatement pstmt = conn.prepareStatement(""); 

    Circle circle = new Circle(1, ""); 
    return circle; 
} catch (Exception e) { 
    throw new RuntimeException(e); 
    // why we cann't do that. 
    // throw new Exception(e); 
} 

finally { 
    try { 
     conn.close(); 
    } catch (SQLException e) { 
     System.out.println(e); 
    } 
} 

}

Примечание: RuntimeException и его подкласс особый тип исключения, которые не должны быть пойманной явно

+0

Неприемлемый ответ. – GGrec

+0

Как это не имеет значения? – mawia

+0

Вам не нужно объявлять исключения во время выполнения. –

Смежные вопросы