2016-08-28 8 views
1

Когда я пытаюсь выбросить исключение из объявления метода, я получаю сообщение об ошибке «Unreachable catch block для ClassNotFoundException. Это исключение никогда не выбрасывается из тела оператора try».Могу ли я поймать исключение из метода?

Код это:

public class MenuSQL { 
    private static String sentence = ""; 
    private static int option; 
    Statement sentenceSQL = ConnectSQL.getConexion().createStatement(); 

public MenuSQL(int option) throws ClassNotFoundException, SQLException { 
    super(); 
    this.option = option; 
    try { 
     System.out.print("Introduce the sentence: "); 
     System.out.print(sentence); 
     sentence += new Scanner(System.in).nextLine(); 
     System.out.println(MenuSentence.rightNow("LOG") + "Sentence: " + sentence); 

     if (opcion == 4) { 
      MenuSentence.list(sentence); 
     } else { 
      sentenceSQL.executeQuery(sentence); 
     } 
    } catch (SQLException e) { 
     System.out.println(MenuSentence.rightNow("SQL") + "Sentence: " + sentence); 
    } catch (ClassNotFoundException e) { 
     System.out.println(MenuSentence.rightNow("ERROR") + "Sentence: " + sentence); 
    } 
} 
} 

Как я могу поймать ClassNotFoundException? Заранее спасибо.

+1

Почему вы хотите поймать исключение, которое никогда не может быть брошено в ваш 'try'block? И почему ваш метод бросает исключение, если он их ловит? –

+0

В этом методе просто нет смысла исключать ClassNotFoundException. –

+0

Это потому, что компилятор заставляет меня бросить это исключение в методе –

ответ

2

Блок catch в операторе try{...} catch(){...} может обрабатывать исключения, исключенные блоком try{...}. (Или суперкласс этого исключения)

try { 
    Integer.parseInt("1"); 
    //Integer.parseInt throws NumberFormatException 
} catch (NumberFormatException e) { 
    //Handle this error 
} 

Однако то, что вы пытаетесь сделать, это в основном это:

try { 
    Integer.parseInt("1"); 
    //Integer.parseInt throws NumberFormatException 
} catch (OtherException e) { 
    //Handle this error 
} 

Поскольку ни один из операторов в вашем try{...} блок броска OtherException, компилятор не даст вы ошибаетесь, потому что он знает, что ничего в вашем блоке try{...} не будет когда-либо выбросьте это исключение, поэтому не стоит пытаться catch что-то, что никогда не было thrown.

В вашем случае ничего в вашем блоке try{...} не выбрасывает ClassNotFoundException, поэтому вам не нужно его ловить. Вы можете удалить catch (ClassNotFoundException e) {...} со своего кода, чтобы исправить ошибку.

+0

Спасибо Алекс. Ваша информация очень полезна. –

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

  • Нет связанных вопросов^_^