Вот цитата из книги Oracle-Certified-Professiona-Java-SE-8-Programmer-Exam-1Z0-809
In a try-with-resources statement, there might be more than one exception that could get thrown; for example, one within the try block, one within the catch block, and another one within the finally block. However, only one exception can be caught, so the other exception(s) will be listed as suppressed exceptions. From a given exception object, you can use the method getSuppressed() to get the list of suppressed exceptions.
Попробовал на практике:
System.out.println("Type an integer in the console: ");
try(Scanner consoleScanner = new Scanner(System.in)) {
System.out.println("You typed the integer value: " + consoleScanner.nextInt());
int kil = 8/0;
} catch(Exception e) {
// catch all other exceptions here ...
System.out.println("Error: Encountered an exception and could not read an integer from the console... ");
System.out.println("Exiting the program - restart and try the program again!");
}finally {
int kil = 8/0;
}
Результат ничуть не удивил:
Type an integer in the console:
5
You typed the integer value: 5
Error: Encountered an exception and could not read an integer from the console...
Exiting the program - restart and try the program again!
Exception in thread "main" java.lang.ArithmeticException: / by zero
at package3.MethodReference.main(MethodReference.java:183)
Никакого suppress не происходит. Или происходит? Тогда как понимать вывод исключения на консоль? Или я что то неправильно понял?
В твоём коде нет нужды в подавлении. Ты ловишь исключение, логируешь, в этот момент оно считается обработанным, потом управление передается в finally и там выбрасывается новое исключение.
Убери секцию catch и лови на уровне выше. В этом случае в секции finally будет выброшено новое исключение, при этом в стэке уже будет одно необработанное - вот в этот момент и произойдет подавление.
public class HelloWorld{
public static void main(String []args){
try {
try (MyResource r = new MyResource()) {
throw new Exception("from block");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static class MyResource implements AutoCloseable {
public void close() {
throw new IllegalStateException("from close");
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как добавить несколько строк в таблицу если одно из значений будет полученно из SELECT? В запросе все значения не меняются кроме, product_id
Можно ли каким-то образом сделать так, чтобы при добавлении файла шрифта (woff, ttf), имя файла, font-family, бралось из данных самого шрифта (его свойств/метаданных)?