Java бросать проверенные исключения? - PullRequest
0 голосов
/ 17 ноября 2011

Я почти уверен, что это работало раньше, но затмение говорит, что в строке броска есть ошибка.

 try{}
}catch(Exception e){
    throw e;    }

В моем старом студенческом проекте я написал:

 try {
        Class.forName("org.postgresql.Driver");
        this.connection = DriverManager.getConnection(
                DataSource.getURL(), DataSource.getUserName(), DataSource.getPassword());
    } catch (ClassNotFoundException e) {
        System.out.println("Could not find driver to connect to database. Please make"
                + "sure the correseponding postgreSQLjdbc library is added.");
        throw e;

    } catch (SQLException e) {
        System.out.println("Username or password is not correct");
        throw e;
    }

и это было прекрасно.

Только этот тип работает, но это не то, что я хочу

 throw new UnsupportedAddressTypeException();

Ответы [ 4 ]

6 голосов
/ 17 ноября 2011

Предположительно, ваш метод объявлен , чтобы бросить UnsupportedAddressTypeException, но не SQLException и ClassNotFoundException.Проверенные исключения могут быть выброшены (включая перебрасывание существующего) только из методов, которые объявляют, что они выбрасывают эти исключения или суперкласс.

0 голосов
/ 17 ноября 2011

ClassNotFoundException или SQLException - проверенные исключения.Таким образом, предполагается, что они обрабатываются каким-либо образом всякий раз, когда они генерируются (даже если вручную используется ключевое слово throw).

Существует два способа обработки проверенного исключения: 1. Окружить код, который может вызвать проверенное исключение вблок try-catch.2. Добавьте выражение throws после определения метода, в котором написан этот конкретный код.

Теперь, когда вы 'throw e', где e является экземпляром ClassNotFoundException или SQLException, его нужно обрабатывать либо виз двух приведенных выше способов.

Однако UnsupportedAddressTypeException является непроверенным исключением.Так что вам не нужно обращаться с этим явно.Вы можете просто бросить его куда угодно, и Java позаботится об этом.

0 голосов
/ 17 ноября 2011

Без дополнительной информации с подробным описанием того, что именно вы делаете, единственное общее решение, которое я могу вам дать, - это сбросить ваше исключение, заключенное в непроверенную исключение RuntimeException.

Код, который вы включили, сбрасывает исключение, которое является проверенным исключением. Если бы метод, который был incide, не был объявлен с «throws Exception», это не могло бы работать в любой версии Java.

На другой ноте, никогда не входите и не перебрасывайте. Делай либо одно, либо другое. Так что код вашего проекта должен был выглядеть так:

 ....

     } catch (SQLException e) {
        throw RuntimeException("Username or password is not correct", e);
    }
0 голосов
/ 17 ноября 2011

eclipse говорит, что это ошибка, потому что:

Метод, который содержит этот блок кода, должен иметь объявление «throws Exception»

Метод должен либо обработать само исключение, либосигнализировать другим вызывающим методам, что может вызвать исключение, и они должны его обработать.

Альтернативный способ его обработки заключался бы в том, чтобы заключить "throw e" в другой блок try / catch (метод, обрабатывающий само исключение).

Ваш код Uni работал, потому что метод, который имелэти операторы должны быть объявлены следующим образом:

метод x () выбрасывает ClassNotFoundException, SQLException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...