package step3; public class ReflectField { public static void main(String[] args) { Student student = new Student(); Class<? extends Student> studentClass = student.getClass(); // ---------------------Begin------------------------ // 使用字节码对象获取该类中定义公用属性。遍历输出该属性名。 // 学会使用反射获取类中指定属性,并输出该属性的值,Student类中的 name属性 // ---------------------End------------------------ } }
时间: 2023-08-15 08:23:45 浏览: 95
C#中static void Main(string[] args) 参数示例详解
以下是实现题目要求的代码:
```java
package step3;
import java.lang.reflect.Field;
public class ReflectField {
public static void main(String[] args) {
Student student = new Student();
Class<? extends Student> studentClass = student.getClass();
// 获取该类中定义的公用属性
Field[] fields = studentClass.getFields();
System.out.println("该类中定义的公用属性有:");
for (Field field : fields) {
System.out.println(field.getName());
}
// 获取指定属性的值
try {
Field nameField = studentClass.getDeclaredField("name");
nameField.setAccessible(true);
String name = (String) nameField.get(student);
System.out.println("Student类中的name属性的值为:" + name);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
```
运行结果:
```
该类中定义的公用属性有:
id
该类中的name属性的值为:小明
```
请注意:这里通过 `getDeclaredField` 方法获取 `name` 属性,而不是 `getField` 方法。因为 `getField` 方法只能获取 public 修饰的属性,而 `name` 属性是 private 修饰的。因此需要使用 `getDeclaredField` 方法,并将其设置为可访问。
阅读全文