1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 // An exception that doesn't have a <init>(String) method.
18 class BadError extends Error {
BadError()19     public BadError() {
20         super("This is bad by convention");
21     }
22 }
23 
24 // A class that throws BadException during static initialization.
25 class BadInit {
26     static int dummy;
27     static {
28         System.out.println("Static Init");
29         if (true) {
BadError()30             throw new BadError();
31         }
32     }
33 }
34 
35 /**
36  * Exceptions across method calls
37  */
38 public class Main {
exceptions_007()39     public static void exceptions_007() {
40         try {
41             catchAndRethrow();
42         } catch (NullPointerException npe) {
43             System.out.print("Got an NPE: ");
44             System.out.println(npe.getMessage());
45             npe.printStackTrace();
46         }
47     }
main(String args[])48     public static void main (String args[]) {
49         exceptions_007();
50         exceptionsRethrowClassInitFailure();
51     }
52 
catchAndRethrow()53     private static void catchAndRethrow() {
54         try {
55             throwNullPointerException();
56         } catch (NullPointerException npe) {
57             NullPointerException npe2;
58             npe2 = new NullPointerException("second throw");
59             npe2.initCause(npe);
60             throw npe2;
61         }
62     }
63 
throwNullPointerException()64     private static void throwNullPointerException() {
65         throw new NullPointerException("first throw");
66     }
67 
exceptionsRethrowClassInitFailure()68     private static void exceptionsRethrowClassInitFailure() {
69         try {
70             try {
71                 BadInit.dummy = 1;
72                 throw new IllegalStateException("Should not reach here.");
73             } catch (BadError e) {
74                 System.out.println(e);
75             }
76 
77             // Check if it works a second time.
78 
79             try {
80                 BadInit.dummy = 1;
81                 throw new IllegalStateException("Should not reach here.");
82             } catch (BadError e) {
83                 System.out.println(e);
84             }
85         } catch (Exception error) {
86             error.printStackTrace();
87         }
88     }
89 }
90