TL; DR:它将它们组合在一起形成
bit field.
要理解这一点,你需要了解二进制如何工作,这类似于十进制 – 让我们从那里开始:
1 - public
10 - static
100 - final
那么,101意味着什么?它必须是公共最终的,因为除了单个100和单个1之外,十进制系统中没有其他方法可以制作“一百零一”.
现在将其扩展为二进制:
1 - public
2 - private
4 - protected
8 - static
那9是什么意思?好吧,与十进制系统一样,只有一种(正确的)方法可以使二进制9 – 一个8和一个1.
现在我们使用我们称之为位域的内容,二进制中的9是:
1001
要验证,写一些代码!
public static void main(String[] args) throws Exception {
int i = 9;
System.out.println(Integer.toBinaryString(i));
}
现在,使用十进制系统,我们将重复除以10并检查最右边的数字(最不重要).对于二进制,这个过程是相同的,除了我们除以2 – 这被称为位移.
public static void main(String[] args) throws Exception {
int i = 9;
System.out.println(Integer.toBinaryString(i));
i >>= 1;
System.out.println(Integer.toBinaryString(i));
i >>= 1;
System.out.println(Integer.toBinaryString(i));
i >>= 1;
System.out.println(Integer.toBinaryString(i));
}
输出:
1001
100
10
1
所以,如果我知道private是21的值,并且我们知道我们有多少位,那么只需要移位正确的位数并将模数取为2:
public static void main(String[] args) throws Exception {
int i = 9;
i >>= 2;
System.out.println(i%2);
}
输出:
0
所以我们基本上使用构成二进制数的1和0值来编号来存储布尔值.
所以把这个例子带入阅读世界:
public static void main(String[] args) throws Exception {
final Method method = App.class.getMethod("myMethod");
final int modifiers = method.getModifiers();
System.out.println(modifiers);
System.out.println(Integer.toBinaryString(modifiers));
}
public strictfp synchronized static final void myMethod() {
}
输出:
2105
100000111001
所以我们可以看到我们有:
20 = 1 – 是的21 = 2 – 假22 = 4 – 假23 = 8 – 是的24 = 16 – 是的25 = 32 – 真27 = 64 – 假28 = 128 – 错误29 = 256 – 错误210 = 512 – 假211 = 1024 – 假212 = 2048 – 是的