33 /**
34 * Signals that an unexpected exception has occurred in a static initializer.
35 * An <code>ExceptionInInitializerError</code> is thrown to indicate that an
36 * exception occurred during evaluation of a static initializer or the
37 * initializer for a static variable.
38 *
39 * <p>As of release 1.4, this exception has been retrofitted to conform to
40 * the general purpose exception-chaining mechanism. The "saved throwable
41 * object" that may be provided at construction time and accessed via
42 * the {@link #getException()} method is now known as the <i>cause</i>,
43 * and may be accessed via the {@link Throwable#getCause()} method, as well
44 * as the aforementioned "legacy method."
45 *
46 * @author Frank Yellin
47 * @since 1.1
48 */
49 public class ExceptionInInitializerError extends LinkageError {
50 /**
51 * Use serialVersionUID from JDK 1.1.X for interoperability
52 */
53 private static final long serialVersionUID = 1521711792217232256L;
54
55 /**
56 * Constructs an <code>ExceptionInInitializerError</code> with
57 * <code>null</code> as its detail message string and with no saved
58 * throwable object.
59 * A detail message is a String that describes this particular exception.
60 */
61 public ExceptionInInitializerError() {
62 initCause(null); // Disallow subsequent initCause
63 }
64
65 /**
66 * Constructs a new <code>ExceptionInInitializerError</code> class by
67 * saving a reference to the <code>Throwable</code> object thrown for
68 * later retrieval by the {@link #getException()} method. The detail
69 * message string is set to <code>null</code>.
70 *
71 * @param thrown The exception thrown
72 */
92 * caused this error to be created.
93 *
94 * <p>This method predates the general-purpose exception chaining facility.
95 * The {@link Throwable#getCause()} method is now the preferred means of
96 * obtaining this information.
97 *
98 * @return the saved throwable object of this
99 * <code>ExceptionInInitializerError</code>, or <code>null</code>
100 * if this <code>ExceptionInInitializerError</code> has no saved
101 * throwable object.
102 */
103 public Throwable getException() {
104 return super.getCause();
105 }
106
107 /**
108 * Serializable fields for ExceptionInInitializerError.
109 *
110 * @serialField exception Throwable
111 */
112 private static final ObjectStreamField[] serialPersistentFields = {
113 new ObjectStreamField("exception", Throwable.class)
114 };
115
116 /*
117 * Reconstitutes the ExceptionInInitializerError instance from a stream
118 * and initialize the cause properly when deserializing from an older
119 * version.
120 *
121 * The getException and getCause method returns the private "exception"
122 * field in the older implementation and ExceptionInInitializerError::cause
123 * was set to null.
124 */
125 private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
126 ObjectInputStream.GetField fields = s.readFields();
127 Throwable exception = (Throwable) fields.get("exception", null);
128 if (exception != null) {
129 setCause(exception);
130 }
131 }
132
133 /*
134 * To maintain compatibility with older implementation, write a serial
135 * "exception" field with the cause as the value.
136 */
137 private void writeObject(ObjectOutputStream out) throws IOException {
138 ObjectOutputStream.PutField fields = out.putFields();
139 fields.put("exception", super.getCause());
140 out.writeFields();
141 }
142
143 }
|
33 /**
34 * Signals that an unexpected exception has occurred in a static initializer.
35 * An <code>ExceptionInInitializerError</code> is thrown to indicate that an
36 * exception occurred during evaluation of a static initializer or the
37 * initializer for a static variable.
38 *
39 * <p>As of release 1.4, this exception has been retrofitted to conform to
40 * the general purpose exception-chaining mechanism. The "saved throwable
41 * object" that may be provided at construction time and accessed via
42 * the {@link #getException()} method is now known as the <i>cause</i>,
43 * and may be accessed via the {@link Throwable#getCause()} method, as well
44 * as the aforementioned "legacy method."
45 *
46 * @author Frank Yellin
47 * @since 1.1
48 */
49 public class ExceptionInInitializerError extends LinkageError {
50 /**
51 * Use serialVersionUID from JDK 1.1.X for interoperability
52 */
53 @java.io.Serial
54 private static final long serialVersionUID = 1521711792217232256L;
55
56 /**
57 * Constructs an <code>ExceptionInInitializerError</code> with
58 * <code>null</code> as its detail message string and with no saved
59 * throwable object.
60 * A detail message is a String that describes this particular exception.
61 */
62 public ExceptionInInitializerError() {
63 initCause(null); // Disallow subsequent initCause
64 }
65
66 /**
67 * Constructs a new <code>ExceptionInInitializerError</code> class by
68 * saving a reference to the <code>Throwable</code> object thrown for
69 * later retrieval by the {@link #getException()} method. The detail
70 * message string is set to <code>null</code>.
71 *
72 * @param thrown The exception thrown
73 */
93 * caused this error to be created.
94 *
95 * <p>This method predates the general-purpose exception chaining facility.
96 * The {@link Throwable#getCause()} method is now the preferred means of
97 * obtaining this information.
98 *
99 * @return the saved throwable object of this
100 * <code>ExceptionInInitializerError</code>, or <code>null</code>
101 * if this <code>ExceptionInInitializerError</code> has no saved
102 * throwable object.
103 */
104 public Throwable getException() {
105 return super.getCause();
106 }
107
108 /**
109 * Serializable fields for ExceptionInInitializerError.
110 *
111 * @serialField exception Throwable
112 */
113 @java.io.Serial
114 private static final ObjectStreamField[] serialPersistentFields = {
115 new ObjectStreamField("exception", Throwable.class)
116 };
117
118 /*
119 * Reconstitutes the ExceptionInInitializerError instance from a stream
120 * and initialize the cause properly when deserializing from an older
121 * version.
122 *
123 * The getException and getCause method returns the private "exception"
124 * field in the older implementation and ExceptionInInitializerError::cause
125 * was set to null.
126 */
127 @java.io.Serial
128 private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
129 ObjectInputStream.GetField fields = s.readFields();
130 Throwable exception = (Throwable) fields.get("exception", null);
131 if (exception != null) {
132 setCause(exception);
133 }
134 }
135
136 /*
137 * To maintain compatibility with older implementation, write a serial
138 * "exception" field with the cause as the value.
139 */
140 @java.io.Serial
141 private void writeObject(ObjectOutputStream out) throws IOException {
142 ObjectOutputStream.PutField fields = out.putFields();
143 fields.put("exception", super.getCause());
144 out.writeFields();
145 }
146
147 }
|