Java注解与反射

11 注解

11.1 内置注解

        解释给JVM看的注释

  • @Override - 检查该方法是否是重写方法

  • @Deprecated - 标记过时方法

  • @SuppressWarnings - 压制警告("all")

    public class ZJ extends Object{
        @Override//重写方法
        public String toString() {
            return super.toString();
        }
        @Test//测试方法
        @Deprecated//过时方法
        public void method(){
            System.out.println(new Date().toLocaleString());
        }
        @SuppressWarnings("all")//压制警告
        public void show(){
            List list=new ArrayList(); 
        }
    }

11.2 元注解

        作用在其他注解的注解

  • @Retention - 表示注解在哪些地方有效(value = RetentionPolicy.SOURCE>CLASS>RUNTIME

  • @Documented - 表示注解是否包含在用户文档中

  • @Target - 表示注解可以用的地方(value = ElementType.METHOD

  • @Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)

12 反射

概念:获取类的属性和方法,动态获取无限制

/*
获取方法    Method
获取构造器   Constructor
获取成员变量  Field
*/
public class Reflect_1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> c=Class.forName("MyConstructor");//传入类路径*此处为相对引用
        Constructor<?>[] cons = c.getConstructors();//获取公共方法
        for (Constructor con : cons) {
            System.out.println(con);
        }
        System.out.println("-------------");
        Constructor<?>[] cons1=c.getDeclaredConstructors();//获取所有方法
        for (Constructor con1 : cons1) {
            System.out.println(con1);
        }
        System.out.println("-------------");
        Constructor<?> con2=c.getConstructor();
        Object obj= con2.newInstance();//传参获取指定方法
        System.out.println(obj);
    }
}
//暴力反射
public class Reflect_2 {
    public static void main(String[] args) throws Exception{
        Class<?> c=Class.forName("MyConstructor");
        Constructor<?> con=c.getDeclaredConstructor(String.class);
​
        con.setAccessible(true);//解除私有限定
​
        Object obj = con.newInstance("无名");
        System.out.println(obj);
    }
}


版权声明:本文为niko_2018原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。