reflect
反射机制用来描述所有的类,所有的类具有相同的特征(属性、方法、构造、权限修饰符)
Class 描述类本身
Package
Field 描述类中的属性
Method 描述类的方法
Constructor
Annotation 注解 @Override
获取 Class
1 | ① Class clazz = Class.forName("类全名:包名.类名"); //编译异常 |
常用方法:
clazz.getModifiers(); //修饰符(权限,特征)返回值 int:0-1-2-4-8-16-32-64-128-256-512-1024(默认-public-private-protected-static-final-synchronized-volatile-transient-native-interface-abstract)
clazz.getName(); //包名.类名
clazz.getSimpleName(); //类名
clazz.getPackage();
clazz.getSuperClass(); //获取父类
clazz.getInterfaces(); //获取父接口
clazz.newInstance(); //创建对象,返回值 Object 需要造型
Field field = clazz.getField(“属性名”);
clazz.getFields(); //以上两个方法只能获取公有的属性,包含继承的父类属性
Field f = clazz.getDeclaredField(); //可以获取本类中公有、私有属性,操作异常
f.setAccessible(true); //可以操作私有属性
field.getModifiers();
field.getType(); //获取属性类型
field.getName();
field.set(对象,”属性值”);
field.get(对象);
Method m = clazz.getMethod(“方法名”,”参数类型.class”); //获取公有方法,包含继承的父类方法
m.getParameterTypes();
m.invoke(“对象”,…args:”参数”); //调用方法,返回值 Object
Method m = clazz.getDeclaredMethod(“方法名”,”参数类型.class”); //可以获取本类中公有、私有方法,操作异常
m.setAccessible(true); //可以操作私有方法
con = clazz.getConstructor([“参数类型.class”]);
con.newInstance(…”参数”);
Annotation
格式
@注解说明[(一些信息)]
放置
类、属性、方法、构造方法上面,参数前面
作用
1、充当注释说明 @Deprecated
2、用来代码检测 @Override
3、携带一些信息内容
信息不可以随便写,支持类型:基本类型、String、enum、注解类型、数组类型[以上类型]
1 |
|
- 自定义注解类型
@interface
1 | import java.lang.annotation.Target; |
- 示例
1 | package mySelfannotation; |