2012-01-19 2 views
1

Я использую сторонний библиотечный код, вызывающий только один метод. Метод объявлен, чтобы бросать ZZException, однако, когда он работает в реальной среде, мы обнаружили, что этот метод выкинул IOExceoption когда-то.Почему некоторые IOException выбрасываются из кода библиотеки?

public void TestMethod() throws ZZException 

Мне интересно, почему нет декапликации для исключения IOException? Если не объявить throw IOException, может ли IOException выбрасываться?

BTW, ZZException является подклассом RuntimeException

+0

Вы уверены, что выбрано исключение IOException, а не исключение ZZException, вызванное IOException (что является законным и рекомендуемым способом сделать это)? – Luis

+0

Я уверен, что это исключение IOException. – user705414

+0

является ZZException подкласс IOException? Если это так, перехват IOException также приведет к возникновению исключения ZZException. Может ли это быть тем, что происходит? – yshavit

ответ

1

Thsi может быть ошибкой в ​​библиотечном коде или другой ошибке при использовании библиотеки, лучший способ узнать это сообщить об этом разработчику, включая некоторый код и посмотреть его ответ.

+0

Почему возникает такая ошибка. Java не может скомпилироваться, если эта ошибка произошла? – user705414

+0

Ну, любые неудачные или прерванные операции ввода-вывода вызовут IOException, это не имеет ничего общего с компиляцией, даже если ваш код действителен во время выполнения, все равно может случиться, что что-то пошло не так, и возникает исключение, если это исключение не по ошибке он будет показан на более высоком уровне. – CloudyMarble

+0

@ user705414: посмотрите здесь: http://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html в этом примере, если оператор catch не поймает IOException, это будет выбрано как в вашем случае. – CloudyMarble

0

Если ZZException не является подклассом IOException метод, как документально не может бросить IOException. Скорее всего, документация неверна/устарела. Что происходит, когда вы компилируете класс? Компилятор считает, что он может генерировать исключение IOException?

Другим объяснением было бы то, что он вообще не попадает, но он просто выглядит таким образом в файле журнала, потому что код регистрирует стек стек или из-за того, что он генерирует исключение ZZException, которое обертывает исключение IOException (как его причина) ,

+0

Суперкласс или родительский элемент, а не подкласс. –

+0

Если ZZException расширяет IOException, тогда метод может генерировать исключение IOException (а именно ZZException), просто не * any * IOException. – Thilo

1

Если только ZZException является суперкласс IOException, IOException не может быть выброшен на месте ZZException. Концепция цепочки исключений позволяет указать «причину» для данного исключения. Вы уверены, что не видите IOException в трассировке стека как «причину» для оригинала ZZException? Это поможет, если вы сможете показать нам трассировку стека, которую вы получаете.

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