一、反射Reflect
1.定义
反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能。
2.获取类对象
(1)Class.forName(全类名)
(2)类名.class
(3)对象.getClass()
3.获得包名、类名
c1.getPackage().getName()
包名
c1.getName()
完整类名
c1.getSimpleName()
类名,不含包名
4.获得成员变量定义信息
getFields()
获得所有公开的成员变量,包括继承的变量
getDeclaredFields()
获得本类定义的成员变量,包括私有
不包括继承的变量
getField(变量名)
getDeclaredField(变量名)
5. 获得构造方法定义信息
getConstructors()
获得所有公开的构造方法
getDeclaredConstructors()
获得所有构造方法,包括私有
getConstructor(参数类型列表)
getDeclaredConstructor(int.class, String.class)
6. 获得方法定义信息
getMethods()
获得所有可见的方法,包括继承的方法
getDeclaredMethods()
获得本类定义的方法,包括私有
不包括继承的方法
getMethod(方法名,参数类型列表)
getDeclaredMethod(方法名, int.class, String.class)
二、注解
1.定义
注解就是一种代码级别的说明,它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
2.分类
(1)JDK自带注解
(2)元注解
(3)自定义注解
3.JDK注解
JDK注解的注解,就5个:
@Override、
@Deprecated标记就表明这个方法已经过时了,但我就要用,别提示我过期
@SuppressWarnings(“deprecation”) 忽略警告
@SafeVarargs jdk1.7出现,堆污染,不常用
@FunctionallInterface jdk1.8出现,配合函数式编程拉姆达表达式,不常用
4.元注解
描述注解的注解,就5个:
l @Target 注解用在哪里:类上、方法上、属性上
l @Retention 注解的声明周期:源文件中、class文件中、运行中
l @Inherited 允许子注解继承
l @Documented 生成javadoc时会包含注解,不常用
l @Repeatable注解为可重复类型注解,可以在同一个地方多次使用,不常用