• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 error class.
18 class BadError extends Error {
BadError(String s)19     public BadError(String s) {
20         super("This is bad by convention: " + s);
21     }
22 }
23 
24 // A class that throws BadError during static initialization.
25 class BadInit {
26     static int dummy;
27     static {
28         System.out.println("Static Init");
29         if (true) {
30             throw new BadError("BadInit");
31         }
32     }
33 }
34 
35 // An error that doesn't have a <init>(String) method.
36 class BadErrorNoStringInit extends Error {
BadErrorNoStringInit()37     public BadErrorNoStringInit() {
38         super("This is bad by convention");
39     }
40 }
41 
42 // A class that throws BadErrorNoStringInit during static initialization.
43 class BadInitNoStringInit {
44     static int dummy;
45     static {
46         System.out.println("Static BadInitNoStringInit");
47         if (true) {
BadErrorNoStringInit()48             throw new BadErrorNoStringInit();
49         }
50     }
51 }
52 
53 /**
54  * Exceptions across method calls
55  */
56 public class Main {
exceptions_007()57     public static void exceptions_007() {
58         try {
59             catchAndRethrow();
60         } catch (NullPointerException npe) {
61             System.out.print("Got an NPE: ");
62             System.out.println(npe.getMessage());
63             npe.printStackTrace(System.out);
64         }
65     }
main(String args[])66     public static void main (String args[]) {
67         exceptions_007();
68         exceptionsRethrowClassInitFailure();
69         exceptionsRethrowClassInitFailureNoStringInit();
70     }
71 
catchAndRethrow()72     private static void catchAndRethrow() {
73         try {
74             throwNullPointerException();
75         } catch (NullPointerException npe) {
76             NullPointerException npe2;
77             npe2 = new NullPointerException("second throw");
78             npe2.initCause(npe);
79             throw npe2;
80         }
81     }
82 
throwNullPointerException()83     private static void throwNullPointerException() {
84         throw new NullPointerException("first throw");
85     }
86 
exceptionsRethrowClassInitFailure()87     private static void exceptionsRethrowClassInitFailure() {
88         try {
89             try {
90                 BadInit.dummy = 1;
91                 throw new IllegalStateException("Should not reach here.");
92             } catch (BadError e) {
93                 System.out.println(e);
94             }
95 
96             // Check if it works a second time.
97 
98             try {
99                 BadInit.dummy = 1;
100                 throw new IllegalStateException("Should not reach here.");
101             } catch (NoClassDefFoundError e) {
102                 System.out.println(e);
103                 System.out.println(e.getCause());
104             }
105         } catch (Exception error) {
106             error.printStackTrace(System.out);
107         }
108     }
109 
exceptionsRethrowClassInitFailureNoStringInit()110     private static void exceptionsRethrowClassInitFailureNoStringInit() {
111         try {
112             try {
113                 BadInitNoStringInit.dummy = 1;
114                 throw new IllegalStateException("Should not reach here.");
115             } catch (BadErrorNoStringInit e) {
116                 System.out.println(e);
117             }
118 
119             // Check if it works a second time.
120 
121             try {
122                 BadInitNoStringInit.dummy = 1;
123                 throw new IllegalStateException("Should not reach here.");
124             } catch (NoClassDefFoundError e) {
125                 System.out.println(e);
126                 System.out.println(e.getCause());
127             }
128         } catch (Exception error) {
129             error.printStackTrace(System.out);
130         }
131     }
132 }
133