Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Объясните, пожалуйста. / 5 сообщений из 5, страница 1 из 1
02.09.2013, 14:25
    #38384197
Sergey1111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните, пожалуйста.
Что значит "Окончательное или более точное повторное генерирование исключения"? В jdk 7 были обновления в обработке исключений. Такие как: try с ресурсами, многократный перехват исключения и окончательное или более точное повторное генерирование исключения. Последнее не понял, объясните, пожалуйста.
...
Рейтинг: 0 / 0
02.09.2013, 15:00
    #38384233
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните, пожалуйста.
Это какой-то неудачный перевод из google-translate.
Стоит почитать оригинальные статьи вроде этой:
http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html

Суть в том что в Java 7 компилятор более умным способом вычислят типы ожидаемых checked exception.

Код: java
1.
2.
3.
4.
5.
6.
7.
void method() throws Exception{ //Задача компилятора узнать какое исключение выкидывает метод, чтобы обязать програмиста указать тип этого checked исключения.
  try{
      throw new IOException(); //Здесь происходит что-то что выкидывает исключение
  }catch(Exception e){
      throw e; //Здесь мы ловим что попало, например для логирования. А потом выбрасываем дальше. Это и есть Re-throw.
  }
}


До Java 7 - компилятор требовал чтобы метод был объявлен как throws Exception. Потому что в строке throw e;, у нас у переменной тип - Exception. Т.е. блок catch как бы прячет реальный тип исключения в тот, который ловится.
В Java 7, компилятор более умный, он ещё и посмотрит что выкидывает тело блока try{...}. А оно у нас выкидывает только IOException. Поэтому метода можно объявить как throws IOException. Что логично и корректно.
...
Рейтинг: 0 / 0
02.09.2013, 15:04
    #38384236
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните, пожалуйста.
Вопрос, естественно не сводиться к объявлению throws у метода. Вопрос в выводе типа исключения вообще. Например

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
try{
  try{
      throw new Exception(); 
  }catch(Exception e){
      throw e;  //Вот тут мы вроде как выкидываем общий Exception.
  }
}catch(IOException e){
      log(e); //Но в Java 7, мы здесь можем поймать внутрений IOException, так как компилятор выведет его тип, ведь внутренний блок никаких других исключений не кидает
}
...
Рейтинг: 0 / 0
02.09.2013, 15:12
    #38384246
Sergey1111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните, пожалуйста.
Спасибо большое.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
28.04.2017, 01:41
    #39445802
Bob Zombie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните, пожалуйста.
Blazkowicz,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Все так, только вместо Exception() во внутреннем блоке нужно генерировать IOException() 
try {
       try {
                throw new IOException();
            }
            catch (Exception e) {
                System.out.println(e);
                throw e;
            }
        } catch (IOException e) {
            System.out.println(e);
_________________________________
java.io.IOException
java.io.IOException
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Объясните, пожалуйста. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]