一、反射
1、Class类
概念
Class类就是我们编写的.java文件在编译之后生成.class文件产生的对象,它能够使用forName方法在磁盘中加载一个Java文件并使用newInstance方法生成Java文件中编写的程序对象。
使用Class.forName(“Java文件路径”).newInstance();得到对象的效果类似于使用new关键字new一个对象。不同的是使用Class类可以在程序执行过程中,根据forName方法中的字符串参数,动态加载新的类的对象。
常见用法
获取Class对象:Class c = Class.forName(“Java文件路径”);
生成程序对象:Object o = c.newInstance();
获取方法对象:Method[] methods = c.getMethods();
判断Class是否添加某注解:Boolean annoted = c.isAnnotationPresent(某注解.class);
2、Method类
概念
指的是Class类中的方法,可以使用invoke方法执行。
常见用法
执行method对应的方法:method.invoke(c.newInstance , 自定义可变长参数);
第一个参数是要新建一个程序对象,来执行该方法;后面参数是一个可变长参数,可以传程序对象中的方法对应的参数个数。
获取method对应的方法的参数:Parameter[] parameters = method.getParameters();
判断method对应的方法是否添加某注解:Boolean annoted = method.isAnnotationPresent(某注解.class);
3、Parameter类
概念
指的是类或者方法中的变量,可以使用getName获取当前变量对应的名称,使用getType方法获取对应的类型。
常见用法
获取parameter对应变量的名称:String pName = parameter.getName();
获取parameter对应变量的类型:if( parameter.getType().isInstance(Integer.class) ){ }
如果当前parameter对应的参数类型是Integer,就…
判断parameter对应变量是否添加某注解:Boolean annoted = parameter.isAnnotationPresent(某注解.class);
二、注解
1、注解种类:
三种内置注解: JDK1.5之后JVM内置的注解
@Override:表示重写父类方法;
@Declared:表示当前方法虽然还能正常使用,但有了更好的替代品,已经过时了
@SuppressWarnings():表示省略范围内的警告,参数常用all
常用元注解:
@Target():表示当前注解作用的对象,
常用参数有:Type、Method、Field分别对应类、方法、变量
如:@Target({ElementType.TYPE})
@Retention():表示当前注解作用的时间
最常用的是RetentionPolicy.Runtime,表示在程序运行时也起作用
如:@Retention(RetentionPolicy.RUNTIME)
@Document:表示当前注解是否被加入到使用Javadoc命令生成的文档中
等等…
自定义注解: MyAnnotation
(1)创建注解方法
方法一:New→Java类,选择Kind为Annotation,name为MyAnnotation
方法二:public @interface MyAnnotation{}
(2