反射和 注解

单元测试
在要·测试的方法上面写
@test org.junit.text包
@@Before 当在方法上面加上这个以后所有执行所有测试方法开始之前都会执行这个方法
一般用来执行资源加载例如myasql的加载
@After 在所有测试方法执行完毕之后会执行这个方法 大部分用来执行释放方法即是测试方法
出现异常他也会早场执行
反射 框架设计的灵魂
框架:半程品软件。可以在框架的基础上经行软件开发简化代码
反射的概念。将类的哥哥组成部分封装成其他对象
反射的好处
1在程序的运行中操作这些对象
2 可以解耦提高了程序的可扩展性
Calss对象的功能 (这是个类加载器对象)
获取class对象的三种方式
Class.forName(“全类名”)返回一个class对象 这个方法在object类里面
getAnnotations(); 返回一个Annotation数组包含所有有效注解
类名.class()这个需要导入包
拥有对象之后每隔对象逗游一个getClass()方法获得Class对象
类.Calss.getAnnotation(注解名,.class)获取指定注解的类对象(获取到之后就可以使用.语法访问到里面定义的属性)
1获取对象成员变量Field
getFields ()返回一个Filed对象的数获取所有的publlic修饰的对象
getFields (String name)获取一个指定变量名称由public修饰的变量
getDeclaredFields()返回一个·Filed对象数组所有的成员变量不考虑修饰符
getDeclardFields(String name)返回一个fields指顶量·名称不考虑修饰符
当你获取到变量时候后你可以通过get(new 获取变量对象)来获取变量的值
你通过set(获取变量对象,把值修改为);当你在访问修改不是public修饰的变量时候会出现错误
你可以使用filed.AccessIdle(True);忽略权限修饰符的访问
2获取构造方法构造方法对象Constructor
getConstructors()获取public修饰的构造方法 返回一个泛型的constructor数组
getConstructors(构造器参数·列表)获取指定由public参数列表的构造器
格式如Constructors c = 类.,calss.getconstructor(参数1.calss,参数2.class…)
getDeclardeConstructoe()返回所有修饰符修饰的构造方法对象
getDeclardeConstructoe(参数列表)返回执行参数的构造方法
constructor构造对象方法
3获取方法对象Menthod
Method[]getMethods()获取所有有public修饰的方法对象数组
getNetods(方法名)获取指定方法名有public修饰的方法
getDeclaredMethods()获取方法Methods指定方法列表
getDeclaredMethods(string方法名)获取指定方法名的方法对象
注意:当你获取java对象所有方法的时候还会获取他的object方法
Method对象方法
方法对象.invorke(方法类对象,参数列表如果没有参数可以不写)
isAnnotationPresent(注解名.class)查看是不是拥有这个注解如果有
返回true 如果没有返false
获取类名的方法
String name = personClass.getName()
注解
java预定义的一写注解
@Overrride检测该方法是否是继承自父类(接口)的
@Deprecated 该注解标注的内容表示已过时
@SuppersppressWarnings(“传入字符串”)例如传入“all”用来压制警告
自定义注解
格式
元注解
public @interface注解名称{}
本质:注解本质上就是一个接口,改接口默认继承Annotation接口
属性: 1.注解的属性和普通的抽象方法定义一样 不过必须有返回值
只能是基本数据类型和枚举类型或者以上数据了类型的数组可以通过
default来设置自默认的值
实例格式如下
public @interface 注解名称{
int value()default 3;
String name();}
2. 如果只有一个属性需要赋值并且属性名称是value可以省略值得名称直接写值
元注解
@Target(ElementType.取值 [])描述注解能够作用的位置
Elementype取值:TYPE可以作用于类上
METHOD可以作用于方法上 FIELD可以作用到
属性上
@Retention() 描述注解是否被保留阶段
RetentionPolicy.RUNTIME这个参数
当前描述注解会保留到class文件中兵被jvm读取到
RetentionPolicy.CLASS 这个参数
当前描述注解会保留clas文件中但是不会被jvm读取
@Documented 描述注解是否被抽取到api文档中也及时在生成doc文档中会不会显示
@Inherited 描述注解是否被子类继承
解析注解获取注解中的属性
实例
Class reflectTestClass = reflect.class;
pro an = reflectTest.getAnnotation(注解名字.class);//这个
个获取对象其实就是在内存中生成了一个该注解的接口的子类实现对象
String ClassName = an.ClassName;

Guess you like

Origin blog.csdn.net/weixin_43979902/article/details/100141910