运行时类的完整结构
- 通过反射获取运行时类的完整结构
Fidel(字段),Method(方法),Constructor(构造器),Superclass(父类),Interface(接口),Annotation(注解)
public static void main(String[] args) throws Exception {
Class c1 = Class.forName("com.saxon.reflection.Person");
//获得类的名字
System.out.println(c1.getName());//全名:包名+类名
System.out.println(c1.getSimpleName());//类名
Field[] declaredFields = c1.getDeclaredFields();//获得全部属性
for (Field declaredField : declaredFields) {
System.out.println(declaredField);
}
System.out.println("================================");
//获得指定属性的值
Field name = c1.getDeclaredField("name");//可以获得所有的属性
System.out.println(name);
Method[] methods = c1.getMethods();//本类及其父类的全部public方法
for (Method method : methods) {
System.out.println(method);
}
System.out.println("===================================");
Method[] declaredMethods = c1.getDeclaredMethods();//本类的所有方法
for (Field declaredField : declaredFields) {
System.out.println(declaredField);
}
System.out.println("=============================");
//获取指定的方法
Method getName = c1.getMethod("getName", null);
Method getName1 = c1.getDeclaredMethod("setName", String.class);
System.out.println(getName);
System.out.println(getName1);
System.out.println("==============================");
//获取指定的构造器
Constructor[] constructors = c1.getConstructors();
for (Constructor con : constructors) {
System.out.println(con);
}
System.out.println("==============================");
Constructor[] declaredConstructors = c1.getDeclaredConstructors();
for (Constructor declaredConstructor : declaredConstructors) {
System.out.println(declaredConstructor);
}
//获得指定的构造器并打印
System.out.println(c1.getDeclaredConstructor(String.class, int.class, int.class));
}
-
小结
- 在实际的操作中,取得类的信息的操作代码,并不会经常开发。
- 一定要熟悉java.lang.reflect包的作用,反射机制。
- 如何取得类的属性,方法,构造器的名称,修饰符等。