Почему “java.lang. OutOfMemoryError: пространство "кучи" Java”, не пойманное?

Поскольку Python является динамическим языком, это обычно не хорошая идея дать переменной и функции то же имя. идентификатор () является функцией в Python, таким образом, это, рекомендуют не использовать переменную, названную идентификатором. Мысль об этом, которое относится ко всем функциям, что Вы могли бы использовать... переменную, не должна иметь того же имени как функция.

10
задан Crispy 11 December 2009 в 21:46
поделиться

5 ответов

Поскольку OutOfMemoryError является ошибкой , а не исключением . Поскольку OutOfMemoryError не является подклассом Exception , ловушка (Exception e) не применяется.

OutOfMemoryError расширяет ] Throwable , так что вы должны его поймать. Вот обсуждение SO о том, когда (если вообще) следует обнаруживать ошибки. Как правило, поскольку вы ничего не можете с этим поделать, рекомендуется не беспокоиться об обнаружении ошибок в производственном коде. Но, учитывая особый случай, когда вы пытаетесь отладить происходящее, это может быть полезно.

40
ответ дан 3 December 2019 в 13:19
поделиться

«~ Ошибка» не является «~ исключением».

Вы должны перехватить «Ошибка» или «Выбрасываемый»

3
ответ дан 3 December 2019 в 13:19
поделиться

OutOfMemoryError расширяет VirtualMachineError, а Exception расширяет Throwable напрямую. Так что это не ловится согласно спецификациям Java. ЕСЛИ вы хотите перехватить все исключения, добавьте в предложение catch (Throwable e), и он у вас будет.

2
ответ дан 3 December 2019 в 13:19
поделиться

java.lang.OutOfMemoryError не расширяет java.lang.Exception, поэтому он не исключение. OutOfMemoryError расширяет java.lang.Error. Если вы хотите перехватить ошибку, попробуйте следующее:

private void doSomeWork()
{
     try
     {
         processData();  //Causes OutOfMemoryError
         System.out.println("This line does not execute");
     }
     catch (Error e)
     {
         System.out.println("Exception.  This line does not execute.");
         //Log error
     }
     finally
     {
         System.out.println("finally.  This line does execute");
         System.out.println("Thread name: " + Thread.currentThread().getName());

     }
}

Примечание: Exception and Error расширяет Throwable, поэтому вы также можете использовать Throwable для перехвата обоих.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html

11
ответ дан 3 December 2019 в 13:19
поделиться

Что я буду обычно это добавление UncaughtExceptionHandler

0
ответ дан 3 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: