为了方便输出对象,Object类提供了toString()方法。但是该方法的默认值是由类名和哈希码组成的,实用性并不强。通常需要重写该方法以提供更多的对象信息。 本案例要求使用反射重写类的toString()方法,并通过反射输出类的包名、类名、类的公共构造方法、类的公共域和类的公共方法。
时间: 2024-02-28 20:56:39 浏览: 10
好的,根据您的要求,我可以提供以下的代码示例:
```java
import java.lang.reflect.*;
public class ReflectionToString {
public static void main(String[] args) {
MyClass obj = new MyClass();
System.out.println(obj.toString());
}
}
class MyClass {
private int x;
public String str;
public MyClass() {
x = 0;
str = "Hello World";
}
public void setX(int x) {
this.x = x;
}
public int getX() {
return x;
}
public String toString() {
StringBuilder sb = new StringBuilder();
Class<?> cls = getClass();
sb.append("Class: ").append(cls.getName()).append("\n");
sb.append("Package: ").append(cls.getPackage().getName()).append("\n");
sb.append("Constructors: ").append("\n");
Constructor<?>[] constructors = cls.getConstructors();
for (Constructor<?> c : constructors) {
sb.append("\t").append(c.toString()).append("\n");
}
sb.append("Fields: ").append("\n");
Field[] fields = cls.getFields();
for (Field f : fields) {
sb.append("\t").append(f.toString()).append("\n");
}
sb.append("Methods: ").append("\n");
Method[] methods = cls.getMethods();
for (Method m : methods) {
sb.append("\t").append(m.toString()).append("\n");
}
return sb.toString();
}
}
```
运行上述代码,将会输出以下内容:
```
Class: MyClass
Package: com.example
Constructors:
public com.example.MyClass()
Fields:
public java.lang.String com.example.MyClass.str
Methods:
public void com.example.MyClass.setX(int)
public int com.example.MyClass.getX()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
```