注解类的信息必须是基本数据类型/String类型信息/枚举类型/注解类型/数组类型,数组里只能是前四个的类型
@Deprecated 说明方法时废弃的 @Override 做方法的检测是否被重写 @SuppressWarnings(“unused”) 变量定义后未被使用 @SuppressWarnings(“serial”) 实现implements Serializable接口时,告诉编译器不用检测了 @SuppressWarnings(“rawtypes”) 创建集合时没有泛型
先自定义一个注解类
//放在什么上面:属性/方法/构造方法 @Target({ElementType.FIELD,ElementType.METHOD,ElementType.CONSTRUCTOR}) //作用域 @Retention(RetentionPolicy.RUNTIME) public @interface Anno { //不常用 String name = ""; //注解要求方法必须有返回值,只能是上面的五个类型 String[] value()default "哈哈哈"; }在类的属性/方法/构造方法添加注解
public class Atm { @Anno(value = {"张三","李四","王五"}) private String nameString; }读取注解里的值
public static void main(String[] args) { try { //获得类 Class clazz = Class.forName("atm.Atm"); //获得属性 Field field = clazz.getDeclaredField("nameString"); //获得属性上的注解 Annotation annotation = field.getAnnotation(Anno.class); //执行方法即可 // Anno anno= (Anno)annotation; // String[] arr = anno.value(); // for (String string : arr) { // System.out.println(string); // } Class class1 = annotation.getClass(); Method method = class1.getMethod("value"); String[] arr = (String[])method.invoke(annotation); for (String string : arr) { System.out.println(string); } } catch (Exception e) { e.printStackTrace(); } }