1700449235
1700449236
}
1700449237
1700449238
}
1700449239
1700449240
return false;
1700449241
1700449242
}
1700449243
1700449244
}
1700449245
1700449246
//调用者
1700449247
1700449248
class Invoker{
1700449249
1700449250
//该方法打印出true
1700449251
1700449252
public static void m1(){
1700449253
1700449254
System.out.println(Foo.m());
1700449255
1700449256
}
1700449257
1700449258
//该方法打印出false
1700449259
1700449260
public static void m2(){
1700449261
1700449262
System.out.println(Foo.m());
1700449263
1700449264
}
1700449265
1700449266
}
1700449267
1700449268
注意看Invoker类,两个方法m1和m2都调用了Foo的m方法,都是无参调用,返回值却不同,这是我们的Throwable类发挥效能了。JVM在创建一个Throwable类及其子类时会把当前线程的栈信息记录下来,以便在输出异常时准确定位异常原因,我们来看Throwable源代码:
1700449269
1700449270
public class Throwable implements Serializable{
1700449271
1700449272
//出现异常的栈记录
1700449273
1700449274
private StackTraceElement[]stackTrace;
1700449275
1700449276
//默认构造函数
1700449277
1700449278
public Throwable(){
1700449279
1700449280
//记录栈帧
1700449281
1700449282
fllInStackTrace();
1700449283
1700449284
}
[
上一页 ]
[ :1.700449235e+09 ]
[
下一页 ]