在Class、Field、Constructor等类中,可以看到有这样一个方法:getModifiers() 以整数形式返回此Constructor对象所表示构造方法的Java语言修饰符。
它的作用是返回一个类或者其成员的访问修饰符的int类型常量,如需要知道返回的值所代表的意思,则需要了解Java.lang.reflect.Modifier这个类,Modifier 类提供了static方法和常量,对类和成员访问修饰符进行解码。
查找Java的定义可以得到不同修饰符返回的int值,如下表所示:
字段 | 说明 | 取值 |
ABSTRACT | 表示 | 1024 |
FINAL | 16 | |
INTERFACE | 512 | |
NATIVE | 256 | |
PRIVATE | 2 | |
PROTECTED | 4 | |
PUBLIC | 1 | |
STATIC | 8 | |
STRICT | 2048 | |
SYNCHRONIZED | 32 | |
TRANSIENT | 128 | |
VOLATILE | 64 |
用getModifiers()得到了类(或者字段、或者方法)的访问修饰符int值,可以用Modifier类的函数来判断它是否属被某个修饰符修饰。例如:isPublic(int mod),如果整数参数包括public修饰符,则返回true,否则返回false。其他的类似。也可以用Modifier.toString(int mod)方法,返回描述指定修饰符中的访问修饰符标志的字符串。
程序实例:
package com.zxt.modifier;
import java.lang.reflect.Modifier;
import java.lang.reflect.Field;
public class ModifierTest {
public static void main(String[] args) {
Class<?> clazz = Test.class;
// 获取这个类所有的成员变量
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
// 输出字段的名称
System.out.print("字段名:" + field.getName() + " --> ");
// 输出字段的修饰符字符串
System.out
.println("修饰符:" + Modifier.toString(field.getModifiers()) + " (int值:" + field.getModifiers() + ")");
}
}
}
class Test {
public int a;
public static int b;
public static final int c = 0;
private int d;
}