在查看Java中的Class、Field、Constructor等类的时候,都可以看到这样一个方法getModifiers,返回类、接口、变量、方法等以整数编码的Java语言修饰符;如果要了解这些编码代表什么意思就要使用java.lang.reflect.Modifier类的静态方法和常量对这些编码进行解析。
People people = new Student();
int flag = people.getClass().getModifiers();
System.out.println(flag);
Method method = people.getClass().getMethod("work", String.class);
int flagMethod = method.getModifiers();
Constructor constructor = people.getClass().getConstructor();
int flagConstructor = constructor.getModifiers();
1.Modifier修饰符工具类
Modifier类提供解码类和成员访问修饰符的静态方法和常量,修饰符集合被表示为具有表示不同的修饰符的不同位置的整数。表示修饰符的常量的值取自“Java虚拟机规范”第4.1,4.4,4.5和4.7节中的表中。
如下示例:
//判断修饰符是否是public
System.out.println(Modifier.isPublic(flagMethod));
//判断修饰符是否是private
System.out.println(Modifier.isPrivate(flagMethod));
2.访问修饰符编码列表
Modifier类一共提供了12中修饰符的编码表示常量
/*
* Access modifier flag constants from tables 4.1, 4.4, 4.5, and 4.7 of
* <cite>The Java™ Virtual Machine Specification</cite>
*/
public static final int PUBLIC = 0x00000001;
public static final int PRIVATE = 0x00000002;
public static final int PROTECTED = 0x00000004;
public static final int STATIC = 0x00000008;
public static final int FINAL = 0x00000010;
public static final int SYNCHRONIZED = 0x00000020;
public static final int VOLATILE = 0x00000040;
public static final int TRANSIENT = 0x00000080;
public static final int NATIVE = 0x00000100;
public static final int INTERFACE = 0x00000200;
public static final int ABSTRACT = 0x00000400;
public static final int STRICT = 0x00000800;
3.解码方法
Modifier类中提供了修饰符对应的解码方法,如下isPublic方法:
public static boolean isPublic(int mod) {
return (mod & PUBLIC) != 0;
}
其他的解码方法都跟上面的类似,就不一一列出来了。
4.Modifier中还提供了其它的几种方法
classModifiers、constructorModifiers、methodModifiers、fieldModifiers,它们的作用是返回一个int值将可以应用于一个类的源语言修饰符组合在一起。
总结:对于Modifer类在平时的开发过程中是很少用到的,但是在框架和底层的开发中会用到;