Spec-Zone.ru › OpenJDK 27

Класс Throwable

java.lang.Object
java.lang.Throwable
Все реализуемые интерфейсы:
Serializable
Прямые известные подклассы:
Error, Exception
public class Throwable extends Object implements Serializable
Класс Throwable является суперклассом всех ошибок и исключений в языке Java. Виртуальная машина Java выбрасывает только объекты, являющиеся экземплярами этого класса (или одного из его подклассов), и только такие объекты можно выбросить с помощью оператора Java throw. Аналогично, в предложении catch в качестве типа аргумента можно указать только этот класс или один из его подклассов. При проверке исключений во время компиляции Throwable и любой подкласс Throwable, который не является также подклассом ни RuntimeException, ни Error, считаются проверяемыми исключениями.

Экземпляры двух подклассов, Error и Exception, обычно используются для обозначения возникновения исключительных ситуаций. Как правило, эти экземпляры создаются непосредственно в контексте исключительной ситуации, чтобы содержать соответствующую информацию (например, данные трассировки стека).

Сбрасываемый объект содержит снимок стека выполнения своего потока на момент создания. Он также может содержать строку сообщения, предоставляющую дополнительную информацию об ошибке. Со временем сбрасываемый объект может подавлять распространение других сбрасываемых объектов. Наконец, сбрасываемый объект может содержать причину: другой сбрасываемый объект, вызвавший создание данного объекта. Запись этой причинно-следственной информации называется механизмом цепочки исключений: у причины, в свою очередь, может быть своя причина и так далее, образуя «цепочку» исключений, каждое из которых вызвано другим.

Одна из причин, по которой у сбрасываемого объекта может быть причина, заключается в том, что класс, который его выбрасывает, построен на основе абстракции более низкого уровня, а операция на верхнем уровне завершается с ошибкой из-за сбоя на нижнем уровне. Было бы плохим решением позволить сбрасываемому объекту, выброшенному нижним уровнем, распространяться наружу, поскольку он, как правило, не связан с абстракцией, предоставляемой верхним уровнем. Кроме того, это связало бы API верхнего уровня с деталями его реализации, если исключение нижнего уровня является проверяемым. Выбрасывание «обёрнутого исключения» (то есть исключения, содержащего причину) позволяет верхнему уровню сообщить вызывающему коду подробности сбоя, не допуская ни одного из этих недостатков. Это сохраняет возможность изменять реализацию верхнего уровня без изменения его API (в частности, набора исключений, выбрасываемых его методами).

Вторая причина, по которой у сбрасываемого объекта может быть причина, заключается в том, что выбрасывающий его метод должен соответствовать универсальному интерфейсу, который не позволяет методу напрямую выбросить причину. Например, предположим, что постоянная коллекция соответствует интерфейсу Collection, а её постоянство реализовано на основе java.io. Предположим, что внутренний код метода add может выбросить IOException. Реализация может сообщить вызывающему коду подробности IOException и при этом соответствовать интерфейсу Collection, обернув IOException в подходящее непроверяемое исключение. (В спецификации постоянной коллекции следует указать, что она может выбрасывать такие исключения.)

Причина может быть связана со сбрасываемым объектом двумя способами: через конструктор, принимающий причину в качестве аргумента, или через метод initCause(Throwable). Новые классы сбрасываемых объектов, допускающие связывание с причиной, должны предоставлять конструкторы, принимающие причину и делегирующие (возможно, косвенно) одному из конструкторов Throwable, принимающих причину. Поскольку метод initCause является общедоступным, он позволяет связать причину с любым сбрасываемым объектом, даже с «устаревшим сбрасываемым объектом», реализация которого появилась до добавления механизма цепочек исключений в Throwable.

По соглашению класс Throwable и его подклассы имеют два конструктора: один без аргументов, а другой принимает аргумент String, который можно использовать для создания подробного сообщения. Кроме того, у подклассов, с которыми может быть связана причина, должны быть ещё два конструктора: один принимает Throwable (причину), а другой — String (подробное сообщение) и Throwable (причину).

См. Спецификацию языка Java:
11.2 Проверка исключений во время компиляции
С версии:
1.0
См. также:
  • Сериализованная форма

Краткое описание конструкторов

Throwable()
Throwable(String message)
Throwable(String message, Throwable cause)
Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
Throwable(Throwable cause)
Модификатор Конструктор Описание
Создаёт новый сбрасываемый объект, используя null в качестве подробного сообщения.
Создаёт новый сбрасываемый объект с указанным подробным сообщением.
Создаёт новый сбрасываемый объект с указанными подробным сообщением и причиной.
protected
Создаёт новый сбрасываемый объект с указанными подробным сообщением и причиной, а также с включённым или отключённым подавлением и включённой или отключённой возможностью записи трассировки стека.
Создаёт новый сбрасываемый объект с указанной причиной и подробным сообщением (cause==null ? null : cause.toString()) (которое обычно содержит класс и подробное сообщение cause).

Краткое описание методов

Модификатор и тип Метод Описание
final void addSuppressed(Throwable exception)
Добавляет указанное исключение к исключениям, подавленным при обработке этого исключения.
Throwable fillInStackTrace()
Заполняет трассировку стека выполнения.
Throwable getCause()
Возвращает причину этого сбрасываемого объекта или null, если причина отсутствует или неизвестна.
String getLocalizedMessage()
Создаёт локализованное описание этого сбрасываемого объекта.
String getMessage()
Возвращает строку с подробным сообщением этого сбрасываемого объекта.
StackTraceElement[] getStackTrace()
Предоставляет программный доступ к информации о трассировке стека, выводимой методом printStackTrace().
final Throwable[] getSuppressed()
Возвращает массив, содержащий все исключения, которые были подавлены, как правило, оператором try-with-resources, при обработке этого исключения.
Throwable initCause(Throwable cause)
Задаёт указанное значение в качестве причины этого сбрасываемого объекта.
void printStackTrace()
Выводит этот сбрасываемый объект и его трассировку в стандартный поток ошибок.
void printStackTrace(PrintStream s)
Выводит этот сбрасываемый объект и его трассировку в указанный поток печати.
void printStackTrace(PrintWriter s)
Выводит этот сбрасываемый объект и его трассировку в указанный объект печати.
void setStackTrace(StackTraceElement[] stackTrace)
Задаёт элементы трассировки стека, которые будут возвращаться методом getStackTrace() и выводиться методом printStackTrace() и связанными методами.
String toString()
Возвращает краткое описание этого сбрасываемого объекта.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект некоторому другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация устарела и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает значение хеш-кода этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно после того, как он был уведомлён или прерван.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно после того, как он был уведомлён или прерван, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно после того, как он был уведомлён или прерван, либо до истечения заданного промежутка реального времени.

Подробное описание конструкторов

Throwable

public Throwable()
Создает новый объект throwable, используя null в качестве подробного сообщения. Причина не инициализируется, но впоследствии может быть инициализирована вызовом initCause(Throwable).

Для инициализации данных трассировки стека в созданном объекте throwable вызывается метод fillInStackTrace().

Throwable

public Throwable(String message)
Создает новый объект throwable с указанным подробным сообщением. Причина не инициализируется, но впоследствии может быть инициализирована вызовом initCause(Throwable).

Для инициализации данных трассировки стека в созданном объекте throwable вызывается метод fillInStackTrace().

Параметры:
message - подробное сообщение. Подробное сообщение сохраняется для последующего получения методом getMessage().

Throwable

public Throwable(String message, Throwable cause)
Создает новый объект throwable с указанными подробным сообщением и причиной.

Обратите внимание, что подробное сообщение, связанное с cause, не включается автоматически в подробное сообщение этого объекта throwable.

Для инициализации данных трассировки стека в созданном объекте throwable вызывается метод fillInStackTrace().

Параметры:
message - подробное сообщение (сохраняется для последующего получения методом getMessage()).
cause - причина (сохраняется для последующего получения методом getCause()). (Допускается значение null, указывающее, что причина отсутствует или неизвестна.)
С версии:
1.4

Throwable

public Throwable(Throwable cause)
Создает новый объект throwable с указанной причиной и подробным сообщением (cause==null ? null : cause.toString()) (обычно содержащим класс и подробное сообщение cause). Этот конструктор полезен для объектов throwable, которые являются лишь оболочками для других объектов throwable (например, PrivilegedActionException).

Для инициализации данных трассировки стека в созданном объекте throwable вызывается метод fillInStackTrace().

Параметры:
cause - причина (сохраняется для последующего получения методом getCause()). (Допускается значение null, указывающее, что причина отсутствует или неизвестна.)
С версии:
1.4

Throwable

protected Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
Создает новый объект throwable с указанными подробным сообщением и причиной, с включенной или отключенной подавляемостью и с включенной или отключенной возможностью записи трассировки стека. Если подавляемость отключена, метод getSuppressed() для этого объекта вернет массив нулевой длины, а вызовы addSuppressed(Throwable), которые в противном случае добавили бы исключение в список подавленных, не будут иметь эффекта. Если запись трассировки стека отключена, этот конструктор не будет вызывать fillInStackTrace(), в поле stackTrace будет записано null, а последующие вызовы fillInStackTrace и setStackTrace(StackTraceElement[]) не будут задавать трассировку стека. Если запись трассировки стека отключена, getStackTrace() вернет массив нулевой длины.

Обратите внимание, что в других конструкторах Throwable подавляемость считается включенной, а запись трассировки стека — разрешенной. Подклассы Throwable должны документировать условия, при которых подавляемость отключена, а запись трассировки стека запрещена. Отключать подавляемость следует только в исключительных обстоятельствах, когда существуют особые требования, например когда виртуальная машина повторно использует объекты исключений при нехватке памяти. Другой случай, в котором уместны неизменяемые объекты throwable, — когда определенный объект исключения многократно перехватывается и повторно выбрасывается, например для реализации управления потоком между двумя подсистемами.

Параметры:
message - подробное сообщение.
cause - причина. (Допускается значение null, указывающее, что причина отсутствует или неизвестна.)
enableSuppression - включена ли подавляемость
writableStackTrace - разрешена ли запись трассировки стека
С версии:
1.7
См. также:
  • OutOfMemoryError
  • NullPointerException
  • ArithmeticException

Подробное описание методов

getMessage

public String getMessage()
Возвращает строку подробного сообщения этого объекта throwable.
Возвращает:
строку подробного сообщения этого экземпляра Throwable (которая может иметь значение null).

getLocalizedMessage

public String getLocalizedMessage()
Создает локализованное описание этого объекта throwable. Подклассы могут переопределить этот метод для формирования сообщения с учетом локали. Для подклассов, которые не переопределяют этот метод, реализация по умолчанию возвращает тот же результат, что и getMessage().
Возвращает:
Локализованное описание этого объекта throwable.
С версии:
1.1

getCause

public Throwable getCause()
Возвращает причину этого объекта throwable или null, если причина отсутствует или неизвестна. (Причина — это объект throwable, из-за которого был выброшен данный объект throwable.)

Эта реализация возвращает причину, переданную одному из конструкторов, принимающих Throwable, или заданную после создания вызовом метода initCause(Throwable). Обычно переопределять этот метод не требуется, однако подкласс может переопределить его, чтобы возвращать причину, заданную иным способом. Это уместно для «устаревшего связанного объекта throwable», появившегося до добавления связанных исключений в Throwable. Обратите внимание, что переопределять какие-либо методы PrintStackTrace не требуется: все они вызывают метод getCause для определения причины объекта throwable.

Возвращает:
причину этого объекта throwable или null, если причина отсутствует или неизвестна.
С версии:
1.4

initCause

public Throwable initCause(Throwable cause)
Инициализирует причину этого объекта throwable указанным значением. (Причина — это объект throwable, из-за которого был выброшен данный объект throwable.)

Этот метод можно вызвать не более одного раза. Обычно его вызывают из конструктора или сразу после создания объекта throwable. Если этот объект throwable создан с помощью Throwable(Throwable) или Throwable(String,Throwable), этот метод нельзя вызывать ни разу.

Пример использования этого метода для устаревшего типа throwable, который не предоставляет других способов задать причину:

try {
    lowLevelOp();
} catch (LowLevelException le) {
    throw (HighLevelException)
          new HighLevelException().initCause(le); // Legacy constructor
}
Параметры:
cause - причина (сохраняется для последующего получения методом getCause()). (Допускается значение null, указывающее, что причина отсутствует или неизвестна.)
Возвращает:
ссылку на этот экземпляр Throwable.
Вызывает исключение:
IllegalArgumentException - если cause — этот объект throwable. (Объект throwable не может быть причиной самого себя.)
IllegalStateException - если этот объект throwable создан с помощью Throwable(Throwable) или Throwable(String,Throwable) либо если этот метод уже вызывался для данного объекта throwable.
С версии:
1.4

toString

public String toString()
Возвращает краткое описание этого объекта throwable. Результат представляет собой объединение:
  • имени класса этого объекта
  • ": " (двоеточия и пробела)
  • результата вызова метода getLocalizedMessage() этого объекта
Если getLocalizedMessage возвращает null, возвращается только имя класса.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление этого объекта throwable.

printStackTrace

public void printStackTrace()
Выводит этот объект throwable и его трассировку стека в стандартный поток ошибок. Этот метод выводит трассировку стека для объекта Throwable в поток вывода ошибок, заданный значением поля System.err. Первая строка вывода содержит результат вызова метода toString() для этого объекта. Остальные строки содержат данные, ранее записанные методом fillInStackTrace(). Формат этих данных зависит от реализации, но следующий пример можно считать типичным:
java.lang.NullPointerException
        at MyClass.mash(MyClass.java:9)
        at MyClass.crunch(MyClass.java:6)
        at MyClass.main(MyClass.java:3)
Этот пример получен при запуске программы:
class MyClass {
    public static void main(String[] args) {
        crunch(null);
    }
    static void crunch(int[] a) {
        mash(a);
    }
    static void mash(int[] b) {
        System.out.println(b[0]);
    }
}
Трассировка стека объекта throwable с инициализированной ненулевой причиной обычно должна содержать трассировку стека причины. Формат этих данных зависит от реализации, но следующий пример можно считать типичным:
HighLevelException: MidLevelException: LowLevelException
        at Junk.a(Junk.java:13)
        at Junk.main(Junk.java:4)
Caused by: MidLevelException: LowLevelException
        at Junk.c(Junk.java:23)
        at Junk.b(Junk.java:17)
        at Junk.a(Junk.java:11)
        ... 1 more
Caused by: LowLevelException
        at Junk.e(Junk.java:30)
        at Junk.d(Junk.java:27)
        at Junk.c(Junk.java:21)
        ... 3 more
Обратите внимание на строки, содержащие символы "...". Эти строки указывают, что оставшаяся часть трассировки стека этого исключения совпадает с указанным количеством кадров в нижней части трассировки стека исключения, вызвавшего данное исключение («охватывающего» исключения). Это сокращение может значительно уменьшить объем вывода в распространенном случае, когда обернутое исключение выбрасывается из того же метода, в котором перехватывается «исходное исключение». Приведенный выше пример получен при запуске программы:
public class Junk {
    public static void main(String args[]) {
        try {
            a();
        } catch(HighLevelException e) {
            e.printStackTrace();
        }
    }
    static void a() throws HighLevelException {
        try {
            b();
        } catch(MidLevelException e) {
            throw new HighLevelException(e);
        }
    }
    static void b() throws MidLevelException {
        c();
    }
    static void c() throws MidLevelException {
        try {
            d();
        } catch(LowLevelException e) {
            throw new MidLevelException(e);
        }
    }
    static void d() throws LowLevelException {
       e();
    }
    static void e() throws LowLevelException {
        throw new LowLevelException();
    }
}

class HighLevelException extends Exception {
    HighLevelException(Throwable cause) { super(cause); }
}

class MidLevelException extends Exception {
    MidLevelException(Throwable cause)  { super(cause); }
}

class LowLevelException extends Exception {
}
Начиная с выпуска 7, платформа поддерживает концепцию подавленных исключений (в сочетании с оператором try-with-resources). Все исключения, подавленные для передачи другого исключения, выводятся под трассировкой стека. Формат этих данных зависит от реализации, но следующий пример можно считать типичным:
Exception in thread "main" java.lang.Exception: Something happened
        at Foo.bar(Foo.java:10)
        at Foo.main(Foo.java:5)
        Suppressed: Resource$CloseFailException: Resource ID = 0
                at Resource.close(Resource.java:26)
                at Foo.bar(Foo.java:9)
                ... 1 more
Обратите внимание, что обозначение «... n more» используется для подавленных исключений так же, как и для причин. В отличие от причин, подавленные исключения имеют больший отступ, чем их «содержащие исключения».

У исключения может быть причина и одно или несколько подавленных исключений:

Exception in thread "main" java.lang.Exception: Main block
        at Foo3.main(Foo3.java:7)
        Suppressed: Resource$CloseFailException: Resource ID = 2
                at Resource.close(Resource.java:26)
                at Foo3.main(Foo3.java:5)
        Suppressed: Resource$CloseFailException: Resource ID = 1
                at Resource.close(Resource.java:26)
                at Foo3.main(Foo3.java:5)
Caused by: java.lang.Exception: I did it
        at Foo3.main(Foo3.java:8)
Аналогично, у подавленного исключения может быть причина:
Exception in thread "main" java.lang.Exception: Main block
        at Foo4.main(Foo4.java:6)
        Suppressed: Resource2$CloseFailException: Resource ID = 1
                at Resource2.close(Resource2.java:20)
                at Foo4.main(Foo4.java:5)
        Caused by: java.lang.Exception: Rats, you caught me
                at Resource2$CloseFailException.<init>(Resource2.java:45)
                ... 2 more

printStackTrace

public void printStackTrace(PrintStream s)
Выводит этот объект throwable и его трассировку стека в указанный поток печати.
Параметры:
s - PrintStream, используемый для вывода

printStackTrace

public void printStackTrace(PrintWriter s)
Выводит этот объект throwable и его трассировку стека в указанный объект печати.
Параметры:
s - PrintWriter, используемый для вывода
С версии:
1.1

fillInStackTrace

public Throwable fillInStackTrace()
Заполняет трассировку стека выполнения. Этот метод записывает в объект Throwable сведения о текущем состоянии кадров стека для текущего потока.

Если трассировка стека этого объекта Throwable не допускает записи, вызов этого метода не оказывает никакого эффекта.

Возвращает:
ссылку на этот экземпляр Throwable.
См. также:
  • printStackTrace()

getStackTrace

public StackTraceElement[] getStackTrace()
Предоставляет программный доступ к сведениям о трассировке стека, выводимым методом printStackTrace(). Возвращает массив элементов трассировки стека, каждый из которых представляет один кадр стека. Нулевой элемент массива (если длина массива не равна нулю) соответствует вершине стека — последнему вызову метода в последовательности. Обычно это место, в котором данный объект throwable был создан и выброшен. Последний элемент массива (если длина массива не равна нулю) соответствует основанию стека — первому вызову метода в последовательности.

При некоторых обстоятельствах некоторые виртуальные машины могут опускать один или несколько кадров стека в трассировке. В крайнем случае виртуальная машина, не располагающая сведениями о трассировке стека этого объекта throwable, может вернуть из этого метода массив нулевой длины. Как правило, возвращаемый этим методом массив будет содержать по одному элементу для каждого кадра, который был бы выведен методом printStackTrace. Изменения возвращенного массива не влияют на последующие вызовы этого метода.

Возвращает:
массив элементов трассировки стека, представляющих трассировку стека этого объекта throwable.
С версии:
1.4

setStackTrace

public void setStackTrace(StackTraceElement[] stackTrace)
Задает элементы трассировки стека, которые будут возвращаться методом getStackTrace() и выводиться методами printStackTrace() и другими связанными методами. Этот метод, предназначенный для использования в платформах RPC и других сложных системах, позволяет клиенту переопределить трассировку стека по умолчанию, которая генерируется методом fillInStackTrace() при создании объекта throwable или десериализуется при чтении объекта throwable из потока сериализации.

Если трассировка стека этого объекта Throwable не допускает записи, вызов этого метода не оказывает никакого эффекта, кроме проверки аргумента.

Параметры:
stackTrace - элементы трассировки стека, связываемые с этим Throwable. При вызове этого метода указанный массив копируется; изменения указанного массива после возврата метода не повлияют на трассировку стека этого Throwable.
Вызывает исключение:
NullPointerException - если stackTrace имеет значение null или если любой элемент stackTrace имеет значение null
С версии:
1.4

addSuppressed

public final void addSuppressed(Throwable exception)
Добавляет указанное исключение к исключениям, подавленным для передачи этого исключения. Этот метод является потокобезопасным и обычно вызывается (автоматически и неявно) оператором try-with-resources.

Подавление включено, если только оно не отключено в конструкторе. Если подавление отключено, этот метод только проверяет аргумент и не выполняет других действий.

Обратите внимание: когда одно исключение вызывает другое, первое исключение обычно перехватывается, после чего в ответ выбрасывается второе. Иными словами, между этими исключениями существует причинно-следственная связь. Однако бывают ситуации, когда в соседних блоках кода могут быть выброшены два независимых исключения, в частности в блоке try оператора try-with-resources и в сгенерированном компилятором блоке finally, закрывающем ресурс. В таких ситуациях может быть передано только одно из выброшенных исключений. В операторе try-with-resources, если возникают два таких исключения, передается исключение из блока try, а исключение из блока finally добавляется в список исключений, подавленных исключением из блока try. При раскрутке стека исключение может накапливать несколько подавленных исключений.

У исключения могут быть подавленные исключения, даже если оно вызвано другим исключением. Наличие или отсутствие причины семантически известно во время создания исключения; наличие или отсутствие исключений, которые оно подавит, обычно определяется только после его выбрасывания.

Обратите внимание: программист также может использовать этот метод в ситуациях, когда возникают несколько исключений в соседних блоках и передать можно только одно из них.

Параметры:
exception - исключение, добавляемое в список подавленных исключений
Вызывает исключение:
IllegalArgumentException - если exception — этот объект throwable; объект throwable не может подавить сам себя.
NullPointerException - если exception имеет значение null
С версии:
1.7

getSuppressed

public final Throwable[] getSuppressed()
Возвращает массив, содержащий все исключения, подавленные, как правило, оператором try-with-resources для передачи этого исключения. Если исключения не подавлялись или подавление отключено, возвращается пустой массив. Этот метод является потокобезопасным. Изменения возвращенного массива не влияют на последующие вызовы этого метода.
Возвращает:
массив, содержащий все исключения, подавленные для передачи этого исключения.
С версии:
1.7

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API