我特么直接
System.out.println(30);
可以用异常来获取你想要的值
感觉不太可能。num1和num2是局部变量。并且被封装在了一个类里。只有调用方法的时候他们才会被创建,而方法调用完后他们又被抛弃了。所以我认为不太可能。甚至是完全不可能
很难做到,再说它们都是 void 类型,即使你不使用反射。一个没有返回值的方法怎么能获取它里面的局部变量呢?好比一个箱子,如果你不打卡,也没有任何暗示或小孔,你是永远不知道它里面有什么!
如果你指的是不改变 Xxx 类的源代码,那确实有可能做到,改变编译后的 class 文件,拦截本地变量的赋值就可以了,感兴趣可以用 ASM 框架试试
用反射(Reflect)
Class c = t.getClass();
java.lang.reflect.Field f= c.getDeclaredField("num");
f.setAccessible(true);
Object v = f.get(t);
System.out.println(v);
t.f1();
v = f.get(t);
System.out.println(v);