Annotation:表示注解
AnnotatedElement:表示被注解的元素,所以不是注解。如Class、Constructor、Field、Method、Package。
GenericArrayType:表示数组类型
GenericDeclaration:声明类型变量的所有实体的公共接口
InvocationHandler:是代理实例的调用处理程序实现的接口。(真难理解/(ㄒoㄒ)/~~)
Member:成员(包括字段,方法和构造方法)
ParameterizedType:表示参数化类型
Type:是所有类型的公共接口
TypeVariable:各种类型变量的公共高级接口
WildcardType:表示通配符类型表达式,如?、?extends Number或? super Integer。
AccessibleObject:是Field、Method和Constructor对象的基类
Array:是一个工具类,提供了动态创建和访问Java数组的方法
Constructor: 提供了关于类的单个构造方法的信息以及对它的访问权限
Field
Method
Modifier
Proxy:提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
ReflectPermission:反射操作的Permission
AnnotatedElement接口是所有程序元素的父接口,所以程序通过反射获取了某个类的AnnotatedElement对象后,程序就可以调用该对象的方法来访问Annotation信息。
getAnnotation(Class): 返回程序元素上存在的、指定类型的注解。
getAnnotations():所有注解
getDeclaredAnnotations():返回自己的所有注解,不包括继承过来的。
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {
String value() default "";
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
public enum Color{ BULE,RED,GREEN};
Color fruitColor() default Color.GREEN;
}
Modifier:
… |
native |
transient |
volatile |
synchronized |
final |
static |
protected |
private |
public |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
public class MyTest {
public int a;
public static int b;
public static final int c = 0;
private int d;
}
///////////////////////////////
public static void main(String[] args) {
Class<?> clazz = MyTest.class;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
String name = field.getName();
int modifierValue = field.getModifiers();
String modifierStr = Modifier.toString(field.getModifiers());
String msg = String.format("%s: 0x%08x -> %s", name, modifierValue, modifierStr);
System.out.println(msg);
}
}
a: 0x00000001 -> public
b: 0x00000009 -> public static
c: 0x00000019 -> public static final
d: 0x00000002 -> private
Modifier.isPublic(field.getModifiers());
Modifier.isAbstract(field.getModifiers());