不改变类,如何在测试类中输出变量的值

img

我特么直接


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);