如果没有类的源代码,如何在Java中打印对象的值?

public class MyClass { ClassABC abc = new ClassABC(); } 

我只有一个ClassABC的.class文件。 我想打印“abc”对象的所有公共,私有,受保护和默认字段值。 我怎么能用Reflection做到这一点?

您可以通过Class#getDeclaredFields()获取所有字段。 每个返回一个Field对象,您可以使用get()方法获取该值。 要获取非公共字段的值,只需将Field#setAccessible()true

所以,坚持:

 ClassABC abc = new ClassABC(); for (Field field : abc.getClass().getDeclaredFields()) { field.setAccessible(true); String name = field.getName(); Object value = field.get(abc); System.out.printf("Field name: %s, Field value: %s%n", name, value); } 

也可以看看:

  • 反思教程

您还可以在JVM上安装jython – Python itnerpreter,并使用内置的Python“dir”函数。

这很棒,因为它允许您与对象进行实时交互:

 [gwidion@powerpuff]$ jython Jython 2.2.1 on java1.6.0_13 Type "copyright", "credits" or "license" for more information. >>> import java.awt >>> dir(java.awt.Window) ['active', 'addPropertyChangeListener', 'addWindowFocusListener', 'addWindowListener', 'addWindowStateListener', 'alwaysOnTop', 'alwaysOnTopSupported', 'applyResourceBundle', 'bufferStrategy', 'createBufferStrategy',...