在类加载时, 会在内存中生成一份Object.class对象. 该对象为我们访问字节码文件提供了接口.
1. 获取Class对象
1). Class<Person> clz = Class.forName("com.xxx.Person");
2). Class<Proson> clz = com.xxx.Person.class;
2. 获取所有已经声明的构造函数, 并根据构造函数创建实例.
Constructor[] constructors = clz.getDeclaredConstructors();
constructors[0].setAccessible(true);
constructors[0].newInstance(); //无参构造函数
3. 获取方法, 并调用
Method m = clz.getMethod("setName",String.class);
m.invoke(new Person(),"wangwu");
4. 获取注解的值
Method[] methods = clz.getDeclaredMethods();
for (Method method : methods) {
if(method.isAnnotationPresent(Name.class)){
Name name = method.getAnnotation(Name.class);
System.out.println(name.value());
}
}
Name注解定义
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Name {
String value() default "xiaoming";
}
Person对象定义
public class Person(){
public Person(){}
private String name;
@Name(value="zhangsan")
public void setName(String name){
this.name = name;
}
}
打开App,阅读手记