1700449225
1700449226
StackTraceElement[]sts=new Throwable().getStackTrace();
1700449227
1700449228
//检查是否是m1方法调用
1700449229
1700449230
for(StackTraceElement st:sts){
1700449231
1700449232
if(st.getMethodName().equals(“m1”)){
1700449233
1700449234
return true;
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;
[
上一页 ]
[ :1.700449225e+09 ]
[
下一页 ]