Могу ли я поймать исключение броска из метода?

Когда я пытаюсь создать исключение из объявления метода, я получаю сообщение об ошибке «Недостижимый блок catch для 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? Заранее спасибо.


person mindOf_L    schedule 28.08.2016    source источник
comment
Почему вы хотите поймать исключение, которое никогда не может быть вызвано в вашем блоке try? И почему ваш метод выдает исключение, хотя он их ловит?   -  person Frank Puffer    schedule 28.08.2016
comment
В методе просто нет смысла вызывать исключение ClassNotFoundException.   -  person parabolah    schedule 28.08.2016
comment
Это потому, что компилятор заставляет меня бросить это исключение в методе   -  person mindOf_L    schedule 29.08.2016


Ответы (1)


Блок 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) {...} из своего кода, чтобы исправить ошибку.

person InternetUnexplorer    schedule 28.08.2016
comment
Спасибо, Алекс. Ваша информация очень полезна. - person mindOf_L; 12.09.2016