2020-04-13注解和反射


注解存在三个位置:

【2】自定义注解+反射使用

【3】ElementType:注解使用范围

【4】RetentionPolicy:指定注解存活的位置。

     - source \ class【默认】 \ runtime

     - 保留Java文件当中  \ 保留class文件当中【默认】 \ 在JVM执行过程当中依旧能够获取

【5】@interface 自定义注解——默认只存在于class文件当中;如果要要实际开发中被反射获取,需要使用元注解。

【6】@Documented :doc文档、注释;将注解写入到doc文档中

【7】@Target:参数包括,ElementType.[TYPE\FIELD\CONSTRUCTOR\METHOOD\PARAMETER\]

【8】@Retention:参数,RetentionPlolicy.[RUNTIME]

【9】给注解添加属性:【1】生命抽象方法【2】添加默认值

ex:

public String value1() default “”;

public int value2();


常规的内置注解

【1】@Deprecated:过时内容

【2】@Override:重写的方法

【3】@SuppressWarnings:取消编译器的警告


【4】@Functional Interface:函数式接口、匿名接口

【5】@SafeVarargs:用于忽略泛型导致的,所以往往 + final 联合应用

【6】@Rpeatable: 多次使用

    -

反射

【1】框架开发、框架升级——学习华为自定制!

【2】开源框架的问题:安全性无法保障!网络渗透漏洞问题!

【3】黑客攻击——明白网页安全的重要性!

-----------

【1】常规情况:一个类的执行,从源文件开始,经过编译,然后加入类加载器中,然后再执行该程序。——预加载

【2】反射:程序已经在执行了,执行过程当中,获取类、方法、属性等,然后再组织到当前类加载器当中。——动态执行

Class类

【1】Object用于描述对象的类。

【2】Class:描述类的类。

【3】获取Class类:

      -通过类名获取class:Class.forName([完全类名——包命+类名]);{如果无法定位到类,会抛:ClassNotFoundException异常} --一般是在配置文件当中获取的字符串

      -通过对象获取:new Person().getClass();一般用于类型不确定的参数传递

      -通过类获取:Person.class。 一般是明确类型的参数传递

【4】创建实例

       clazz.newInstance()——创建的实例,默认实际是调用目标类的空参构造{抛异常: noSuchMethodException异常}

【5】获得该类基本信息

       clazz.getPackage():完整包名+类名

       clazz.getSimpleName()

       clazz.getSuperclass()      

       clazz.getInterfaces()

【6】获得类内部信息

       Field:类的属性

       clazz.getField(属性名)——只能访问可见的成员

       clazz.getDeclaredField(属性名)——访问所有成员{NoSuchFieldException}

       field.setAccessible(true);——设定访问权限为可见【如果访问的是私有的成员】{并且如果不操作则不报错}

       field.set(对象,值)

       clazz.getFields()——获取所有可见成员

       clazz.getDeclaredFields()——获取所有的成员

       field.getName()

       field.getType().getSimpleName()

       field.getType()——获取属性类型

==================================

       Method method = clazz.getMethod(方法名,参数类型)

       method.invoke(对象,参数);//执行方法

struts





加强训练:成本控制!

-代码驾驭;异常处理;bug解决问题;


注解、XML作用:读取配置信息。

注解对于大型项目,反而不好管理。

异常:程序继续执行:catch;不往下执行,throw

上一篇:Json工具类


下一篇:JAVA反射-根据某个对象的名称和方法去执行该方法