Метод помечен "throws JDOObjectNotFoundException, UnsupportedEncodingException". Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException. Почему так?
Здравствуйте, 0K, Вы писали:
0K>Метод помечен "throws JDOObjectNotFoundException, UnsupportedEncodingException". Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException. Почему так?
Компилятор игнорирует отсутствие catch для JDOObjectNotFoundException и UnsupportedEncodingException. Если я верно понял о чем ты — ты неправ.
Вот это компилится:
class E extends Throwable{};
class B extends Throwable{};
public class a
{
static public void main(String[] args) throws E, B
{
if(true)
{
throw new E();
}
else
{
throw new B();
}
}
}
Здравствуйте, 0K, Вы писали:
0K>Метод помечен "throws JDOObjectNotFoundException, UnsupportedEncodingException". Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException. Почему так?
может, уже вставлен код для отдлова кого-то, наследующегося от JDOObjectNotFoundException?
Здравствуйте, Jakop, Вы писали:
J>Компилятор игнорирует отсутствие catch для JDOObjectNotFoundException и UnsupportedEncodingException. Если я верно понял о чем ты — ты неправ.
А, да вспомнил. Кто-то мне говорил что это не на уровне компилятора сделано а на более высоком. Верно?
Т.е. среда разработки просто не знает что такое JDOObjectNotFoundException, зато знает UnsupportedEncodingException. По этому JDOObjectNotFoundException и игнорирует. Правильно? Или как?
Здравствуйте, 0K, Вы писали:
0K>Здравствуйте, Jakop, Вы писали:
J>>Компилятор игнорирует отсутствие catch для JDOObjectNotFoundException и UnsupportedEncodingException. Если я верно понял о чем ты — ты неправ.
0K>А, да вспомнил. Кто-то мне говорил что это не на уровне компилятора сделано а на более высоком. Верно?
То, что аннотация "throws JDOObjectNotFoundException, UnsupportedEncodingException" говорит компилятору не ругаццо на то, что код не обрабатывает такие исключения — это поддержка со стороны компиляторы. Возможно, эта нанотация компилится так, что и JVM проверяет это, но я этого не знаю. Насчет того, на каком более высоком уровне это обрабатывается не понял.
0K>Т.е. среда разработки просто не знает что такое JDOObjectNotFoundException, зато знает UnsupportedEncodingException. По этому JDOObjectNotFoundException и игнорирует. Правильно? Или как?
Не не так. Я думаю забудь ты про среду разработки. Поиграйся с примером что я постил и обычным ява компилером 1.5 и выше который у тебя стоит. В данном случае IDE не при чем.
Здравствуйте, 0K, Вы писали:
0K>Метод помечен "throws JDOObjectNotFoundException, UnsupportedEncodingException". Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException. Почему так?
Здравствуйте, Alexandro, Вы писали:
A>Здравствуйте, 0K, Вы писали:
0K>>Метод помечен "throws JDOObjectNotFoundException, UnsupportedEncodingException". Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException. Почему так?
A>JDOObjectNotFoundException — runtime exception A>UnsupportedEncodingException — checked exception
Блин, ну зачем ты рассказал. Там такие теории пошли.
Здравствуйте, Nicht, Вы писали:
N>Здравствуйте, Alexandro, Вы писали:
A>>Здравствуйте, 0K, Вы писали:
0K>>>Метод помечен "throws JDOObjectNotFoundException, UnsupportedEncodingException". Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException. Почему так?
A>>JDOObjectNotFoundException — runtime exception A>>UnsupportedEncodingException — checked exception
N>Блин, ну зачем ты рассказал. Там такие теории пошли.
С учетом, того, что при анатации "throws JDOObjectNotFoundException, UnsupportedEncodingException" коммпилер будет игнорить оба этих исключения вне зависимости от того четет они или нет я не совсем понимаю к чему ты это ? ты про какие теории ?
Здравствуйте, Jakop, Вы писали:
J>С учетом, того, что при анатации "throws JDOObjectNotFoundException, UnsupportedEncodingException" коммпилер будет игнорить оба этих исключения вне зависимости от того четет они или нет я не совсем понимаю к чему ты это ? ты про какие теории ?
Про аннотации в исходном посте ни слова. Я не понял, откуда ты их взял. Как и сказал Alexandro, все дело исключительно в Runtime исключении.
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, Jakop, Вы писали:
J>>С учетом, того, что при анатации "throws JDOObjectNotFoundException, UnsupportedEncodingException" коммпилер будет игнорить оба этих исключения вне зависимости от того четет они или нет я не совсем понимаю к чему ты это ? ты про какие теории ?
D>Про аннотации в исходном посте ни слова. Я не понял, откуда ты их взял. Как и сказал Alexandro, все дело исключительно в Runtime исключении.
"Метод помечен "throws JDOObjectNotFoundException, UnsupportedEncodingException"."(c) ну ок, не аннотация. Слово ключевое. Оговорился.
Но суть прежняя. Или мне ондому кажется что при наличии вышеуказанного совершенно пофигу JDOObjectNotFoundException Runtime исключение или нет ?
A compile-time error occurs if any ExceptionType mentioned in a throws clause is not a subtype (§4.10) of Throwable. It is permitted but not required to mention other (unchecked) exceptions in a throws clause.
A compiler for the Java programming language checks, at compile time, that a program contains handlers for checked exceptions, by analyzing which checked exceptions can result from execution of a method or constructor.
The unchecked exceptions classes are the class RuntimeException and its subclasses, and the class Error and its subclasses. All other exception classes are checked exception classes.
Здравствуйте, Аноним, Вы писали:
J>>Но суть прежняя. Или мне ондому кажется что при наличии вышеуказанного совершенно пофигу JDOObjectNotFoundException Runtime исключение или нет ?
А>если кажется, читайте устав:
С уставом знаком. Более того те ссылки что вы привели не противоречат сказанному мной, а напротив подтверждают. Может сегодня не мой день и я зря отказался от прививки против энцефалита, но я и правда не врубаюсь с чем спорите. Пост автора говорил явно, что метод будет игнорировать необработанные исключения "А" и "В"(throws JDOObjectNotFoundException, UnsupportedEncodingException). "А" при этом можно было и не указывать. Когда Alexandro сделал разумное предположение, что "A" просто unchecked я перечитал исходный пост и поставил догадливому коллеге +. Видимо автор и имел ввиду именно это. Однако, в той ветке, которую отбранчил я, я предположил, что автор имеет ввиду, что Компилятор сфейлится если второе исключение было написано через запятую и его таки решили выкинуть и не проверить. Привел пример, показал что это не так. Я по-прежнему утверждаю, что
при наличии в объявлении метода "throws JDOObjectNotFoundException, UnsupportedEncodingException" вот это "Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException" невалидно. Понимаю, что докапываюсь. Понимаю, что всем все понятно и ужасно отрадно видеть, что народ знает устав, и даже умеет на него ссылаться к месту. Но с чем спорите то ? Все ж верно говорю ?
Здравствуйте, Jakop, Вы писали:
J> Я по-прежнему утверждаю, что J> при наличии в объявлении метода "throws JDOObjectNotFoundException, UnsupportedEncodingException" J> вот это "Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException" невалидно.
У меня нет библиотеки JDO, котому я заменил его на RuntimeException. Можно?
Здравствуйте, Skipy, Вы писали:
S>Здравствуйте, Jakop, Вы писали:
J>> Я по-прежнему утверждаю, что J>> при наличии в объявлении метода "throws JDOObjectNotFoundException, UnsupportedEncodingException" J>> вот это "Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException" невалидно.
S>У меня нет библиотеки JDO, котому я заменил его на RuntimeException. Можно?
Да конечно. Ваш пример выглядит вполне нормально. А в чем вопрос или аргумент ? Я же не говорил обратного.
J>С уставом знаком.
т.е. по ссылке уже сходили?
J>Более того те ссылки что вы привели не противоречат сказанному мной, а напротив подтверждают.
голословно.
попробуйте прочитать не только ссылки, но и страницы, на которые ссылки ссылаются.
приведу прежнюю цитату с выделением:
A compiler for the Java programming language checks, at compile time, that a program contains handlers for checked exceptions, by analyzing which checked exceptions can result from execution of a method or constructor.
попробуйте понять, отличаются ли unchecked exception от checked (hint: написано в 11.2)
тогда, возможно, поймете, что утверждение: J>"что при наличии в объявлении метода "throws JDOObjectNotFoundException, UnsupportedEncodingException" вот это "Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException" невалидно."
как раз и "невалидно"
J>Может сегодня не мой день и я зря отказался от прививки против энцефалита, но я и правда не врубаюсь с чем спорите.
вижу
J>Пост автора говорил явно, что метод будет игнорировать необработанные исключения "А" и "В"(throws JDOObjectNotFoundException, UnsupportedEncodingException). "А" при этом можно было и не указывать. Когда Alexandro сделал разумное предположение, что "A" просто unchecked я перечитал исходный пост и поставил догадливому коллеге +.
и это супер!
J>Однако, в той ветке, которую отбранчил я, я предположил, что автор имеет ввиду, что Компилятор сфейлится если второе исключение было написано через запятую и его таки решили выкинуть и не проверить. Привел пример, показал что это не так.
предположили и доблестно опровергли своё предположение? круууто.
J>Я по-прежнему утверждаю, что при наличии в объявлении метода "throws JDOObjectNotFoundException, UnsupportedEncodingException" вот это "Компилятор не требует ловить JDOObjectNotFoundException, только UnsupportedEncodingException" невалидно.
вижу, что ты утверждаешь, но утверждения (сюрприз) принято обосновывать. или у тебя это... голос громкий? так по инету не слышно.
J> Понимаю, что докапываюсь. Понимаю, что всем все понятно и ужасно отрадно видеть, что народ знает устав, и даже умеет на него ссылаться к месту. Но с чем спорите то ? Все ж верно говорю ?
Здравствуйте, Аноним, Вы писали:
А>не знаю, что вы там говорите, но пишите чушь.
заведите аккаунт, я если и говорю ерунду то рискую репутацией, а вы "Аноним 453" просто говорите...
А>>не знаю, что вы там говорите, но пишите чушь. J>заведите аккаунт, я если и говорю ерунду то рискую репутацией, а вы "Аноним 453" просто говорите...
не говорите ерунды, не рискуйте вашей репутацией
а, если боитесь за репутацию — разлогиньтесь или не говорите ничего.
но это — оффтоп.
по теме — как не будет страшно за репутацию — высказывайтесь по предыдущем посланию.
чтобы не было только оффтопик, закину тогда красотищу на смежную тему. Например, на try-catch-finally блоки. Смотрите, какую красотищу нам позволяют писать:
public class TestFinally {
public static void main(String[] args) {
tryBlock:
try {
System.out.println("Inside Try Block");
throw new Exception();
} catch (Exception e) {
System.out.println("Inside Catch Block");
throw new RuntimeException();
} finally {
System.out.println("Inside Finally");
break tryBlock;
}
System.out.println("Inside main - Outside tryBlock");
}
}
правда, если кто найдёт такой автора такого кода или кода с return-ом в finally — автору не поздоровится, но пример — экзотичен и беспощаден, примерно также как и предположение, что если второе exception указано через запятую — его можно игнорировать.
А>чтобы не было только оффтопик, закину тогда красотищу на смежную тему. Например, на try-catch-finally блоки.
Это не на try/catch/finally, а на normal/abrupt completion для statement в общем случае. И в документации поведение указанного примера очень хорошо (и при этом просто!) определено. Хотя мне больше нравится с continue:
public class TestFinally {
public static void main(String[] args) {
System.out.println(getValue());
}
private static int getValue() {
for (int i = 0; i < 10; i++) {
try {
return i;
} finally {
if (i != 5) {
continue;
}
}
}
return -1;
}
}
Хотя с начальным вопросом это все связано только через Abrupt completion по причине Exception и ограничению на класс этих допустимых exception для выполнения метода в целом.