案例:
public static void makeAccessible(Constructor<?> ctor) {
if ((!Modifier.isPublic(ctor.getModifiers()) || !Modifier.isPublic(ctor.getDeclaringClass().getModifiers())) && !ctor.isAccessible()) {
ctor.setAccessible(true);
}
}
Modifier.java isPublic 方法
public static boolean isPublic(int var0) {
return (var0 & 1) != 0;
}
java反射中的Field或Constructor对象的getModifiers方法返回值,主要作用:以整数形式返回该方法或该成员变量的修饰符;


这些编码全部为16进制的编码,所以对应的十进制的数字为:
public为1
private为2
protected为4
static为8
final为16
synchronize为32
volatile为64
transient为128
native为256
interface为512
abstract为1024
strict为2048
如果有多个修饰符累计出现则返回值累加!!!
例如下面的代码:
public class Student {
protected static String name;//Student对象
}
public class RerviewTest {
public static void main(String[] args) {
Class<?> clazz = Student.class;//获取Student的Class对象
try {
Field field = clazz.getDeclaredField("name");//获取成员变量name
System.out.println("!!!!!!!!!!!!!"+field.getModifiers());
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
//输出为12,即static的8加上protected的4

54

被折叠的 条评论
为什么被折叠?



