Home | History | Annotate | Download | only in lang
      1 /*
      2  * Copyright (c) 1996, 2000, Oracle and/or its affiliates. All rights reserved.
      3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      4  *
      5  * This code is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU General Public License version 2 only, as
      7  * published by the Free Software Foundation.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle in the LICENSE file that accompanied this code.
     10  *
     11  * This code is distributed in the hope that it will be useful, but WITHOUT
     12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  * version 2 for more details (a copy is included in the LICENSE file that
     15  * accompanied this code).
     16  *
     17  * You should have received a copy of the GNU General Public License version
     18  * 2 along with this work; if not, write to the Free Software Foundation,
     19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     20  *
     21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 package java.lang;
     27 
     28 /**
     29  * Signals that an unexpected exception has occurred in a static initializer.
     30  * An <code>ExceptionInInitializerError</code> is thrown to indicate that an
     31  * exception occurred during evaluation of a static initializer or the
     32  * initializer for a static variable.
     33  *
     34  * <p>As of release 1.4, this exception has been retrofitted to conform to
     35  * the general purpose exception-chaining mechanism.  The "saved throwable
     36  * object" that may be provided at construction time and accessed via
     37  * the {@link #getException()} method is now known as the <i>cause</i>,
     38  * and may be accessed via the {@link Throwable#getCause()} method, as well
     39  * as the aforementioned "legacy method."
     40  *
     41  * @author  Frank Yellin
     42  * @since   JDK1.1
     43  */
     44 public class ExceptionInInitializerError extends LinkageError {
     45     /**
     46      * Use serialVersionUID from JDK 1.1.X for interoperability
     47      */
     48     private static final long serialVersionUID = 1521711792217232256L;
     49 
     50     /**
     51      * This field holds the exception if the
     52      * ExceptionInInitializerError(Throwable thrown) constructor was
     53      * used to instantiate the object
     54      *
     55      * @serial
     56      *
     57      */
     58     private Throwable exception;
     59 
     60     /**
     61      * Constructs an <code>ExceptionInInitializerError</code> with
     62      * <code>null</code> as its detail message string and with no saved
     63      * throwable object.
     64      * A detail message is a String that describes this particular exception.
     65      */
     66     public ExceptionInInitializerError() {
     67         initCause(null);  // Disallow subsequent initCause
     68     }
     69 
     70     /**
     71      * Constructs a new <code>ExceptionInInitializerError</code> class by
     72      * saving a reference to the <code>Throwable</code> object thrown for
     73      * later retrieval by the {@link #getException()} method. The detail
     74      * message string is set to <code>null</code>.
     75      *
     76      * @param thrown The exception thrown
     77      */
     78     public ExceptionInInitializerError(Throwable thrown) {
     79         initCause(null);  // Disallow subsequent initCause
     80         this.exception = thrown;
     81     }
     82 
     83     /**
     84      * Constructs an ExceptionInInitializerError with the specified detail
     85      * message string.  A detail message is a String that describes this
     86      * particular exception. The detail message string is saved for later
     87      * retrieval by the {@link Throwable#getMessage()} method. There is no
     88      * saved throwable object.
     89      *
     90      *
     91      * @param s the detail message
     92      */
     93     public ExceptionInInitializerError(String s) {
     94         super(s);
     95         initCause(null);  // Disallow subsequent initCause
     96     }
     97 
     98     /**
     99      * Returns the exception that occurred during a static initialization that
    100      * caused this error to be created.
    101      *
    102      * <p>This method predates the general-purpose exception chaining facility.
    103      * The {@link Throwable#getCause()} method is now the preferred means of
    104      * obtaining this information.
    105      *
    106      * @return the saved throwable object of this
    107      *         <code>ExceptionInInitializerError</code>, or <code>null</code>
    108      *         if this <code>ExceptionInInitializerError</code> has no saved
    109      *         throwable object.
    110      */
    111     public Throwable getException() {
    112         return exception;
    113     }
    114 
    115     /**
    116      * Returns the cause of this error (the exception that occurred
    117      * during a static initialization that caused this error to be created).
    118      *
    119      * @return  the cause of this error or <code>null</code> if the
    120      *          cause is nonexistent or unknown.
    121      * @since   1.4
    122      */
    123     public Throwable getCause() {
    124         return exception;
    125     }
    126 }
    127