打字猴:1.700449225e+09
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 ]  [ 下一页 ]