База Hintsage

Исключения

Иерархия исключений, обработка ошибок и управление ресурсами.

Практика

Вопросы: Исключения

Почему этот фрагмент компилируется, хотя first используется при инициализации следующего ресурса?

class Demo {
    static class R implements AutoCloseable {
        R child() { return new R(); }
        public void close() { }
    }

    static void run() {
        try (R first = new R();
             R second = first.child()) {
            // работа с обоими ресурсами
        }
    }
}

Проверьте, будет ли вызван close(), если конструктор ресурса завершился исключением:

class Demo {
    static class R implements AutoCloseable {
        R() {
            System.out.println("construct");
            throw new RuntimeException("init");
        }

        @Override
        public void close() {
            System.out.println("close");
        }
    }

    public static void main(String[] args) {
        try (R r = new R()) {
        } catch (RuntimeException e) {
            System.out.println("caught");
        }
    }
}

Показано 120 из 50