2017-02-13 12 views
-1

Я хочу спросить, какой улов блок будет называться первой, в случае заявления что-то вродеПриоритет между OutOfMemoryError и Exception

try { 
    ...some statement... 
} catch (Exception ex) { 
    System.out.println("out of memory exception"); 
} catch (OutOfMemoryError error) { 
    System.out.println("out of memory error"); 
} 

здесь утверждение вызывает OutOfMemoryError. Я проверил Order of catching exceptions in Java

Это что-то другое, вы не можете предсказать, что произойдет RunTimeException, если код работает без проблем.

+2

Исключения и ошибки ортогональны (они имеют общий супертип, но один не является супертипом другого). Исключение попадает, если генерируется исключение, ошибка возникает при ошибке. –

+0

В случае низкой памяти блок catch OutOfMemoryError будет выполнен с крахом приложения –

+0

@EJP Ваши дубликаты относятся только к Исключениям, этот вопрос несколько отличается (Исключение против ошибки). (Да, возможно, это все еще дубликат в другом месте;), но не этот) –

ответ

4

Pls иметь в виду иерархию объектов:

  • java.lang.Throwable
    • java.lang.Exception
    • Java.lang.Error

Если что-то пойдет не так, это либо ОШИБКА, либо ИСКЛЮЧЕНИЕ. Здесь нет первого, поскольку эти классы являются братьями и сестрами, а не родителями/дочерними.

+0

В моем случае я получаю приложение силы близко, используя только «Исключение». – kishorsinghgour

0

java.lang.Exception и java.lang.Error (OutOfMemory - ошибка) не связаны друг с другом исключением для их общего родителя Throwable. Таким образом, здесь нет ни первого, ни второго.

OutOfMemory происходит, когда ваш jvm умирает (куча полная), что редко, поэтому просто выполняйте очистку внутри.

+0

«Редко»? «OutOfMemory» * всегда * происходит, когда ваша куча заполнена. – EJP

+0

Ваш jvm редко выходит из памяти, но когда это произойдет, он обязательно выбросит OutOfMemory Error –

+0

Это не то, что он говорит в вашем ответе. – EJP