自定义一个注解
//自己写的注解@interface表示注解
@Documented
@Target(ElementType.METHOD)//添加在方法上的注解
@Retention(RetentionPolicy.RUNTIME)//在运行的时候
public @interface Bwei {
public String name() default "恩";
public int age() default 22;
}
User类里面
public class User {
public String name;
private String age;
public User(){
}
public User(String name, String age) {
this.name = name;
this.age = age;
}
//注解加在方法上
@Bwei(name ="恩恩",age = 23)
public void sleep(){
System.out.println("User sleep = ");
}
public void eat(String eat,int time){
System.out.println("User eat ="+eat+""+time);
}
public void eat(String eat){
System.out.println("User eat ="+eat);
}
public String toString(){
return "User{" +
"name='"+name+'\''+
",age="+age+'}';
}
}
测试类里面的代码Test.java
/**
* 反射注解
* */
public class Test {
//psvm
public static void main(String[] args) {
try {
//获取到这个类
Class clazz = Class.forName("com.example.menglucywhh.day1128_create.User");
/* //获取当前类的所有构造方法,public和private
Constructor[] constructors = clazz.getDeclaredConstructors();
for(Constructor constructor : constructors){
System.out.println("constructor = "+constructor);
}
Constructor constructor = constructors[1];
//设置允许访问
constructor.setAccessible(true);
User user = (User) constructor.newInstance("1509D","11");
System.out.println("user = "+user.toString());*/
/* //通过参数的class获取指定的构造方法
Constructor constructor = clazz.getConstructor(String.class,String.class);
//创建一个对象
User user = (User) constructor.newInstance("whw","20");
System.out.println(constructor);
System.out.println("user = "+user.toString());*/
// Field[] fields = clazz.getFields();
/* User user = (User) clazz.newInstance();
//获取当前类的所有属性
Field[] fields = clazz.getDeclaredFields();
for (Field field:fields){
//设置可以访问private的属性
field.setAccessible(true);
System.out.println("field ="+field);
//设置user对象属性值为11,name和age都为11
field.set(user,"11");
//获取user对象的属性值
Object o = field.get(user);
System.out.println("o = "+o);
}
System.out.println("user = "+user.toString());*/
/* //获取所有的方法 公有和私有
Method[] methods = clazz.getDeclaredMethods();
//创建一个对象
User user = (User) clazz.newInstance();
for(Method method : methods){
method.setAccessible(true);
System.out.println("method = " + method);
}
Object toString = methods[0].invoke(user,null);
//调用的是eat 参数是1509D
Object eat = methods[1].invoke(user,"1509D");
System.out.println("toString = " + eat);
//name 方法名
// String.class 参数的class 参数为string
Method method = clazz.getMethod("eat",String.class);
//执行 user对象身上的方法 参数是1509
method.invoke(user,"1509");*/
//操作注解
Method method = clazz.getMethod("sleep", null);
//判断这个方法是否有这个注解
boolean isEmpty = method.isAnnotationPresent(Bwei.class);
if(isEmpty){
//获取对应的注解
Bwei bwei = method.getAnnotation(Bwei.class);
System.out.println("bwei = "+bwei.name()+ " "+bwei.age());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}