因为手头开着Dev C++,所以示例代码用C语言来演示了,用JAVA的道理是一样的。
先看一段基本的代码:
#include <stdio.h>
int PRIVATE = 0x1;
int PUBLIC = 0x2;
int FINAL = 0x4;
int STATIC = 0x8;
int main(){
int yu(int a,int b);
int isPRIVATE(int a);
int isPublic(int a);
int isFINAL(int a);
int isSTATIC(int a);
int identifer = PUBLIC|STATIC;
printf("identifer:%d\n",identifer);
printf("is PRIVATE:%d\n", isPRIVATE(identifer));
printf("is Public:%d\n", isPublic(identifer));
printf("is FINAL:%d\n", isFINAL(identifer));
printf("is STATIC:%d\n", isSTATIC(identifer));
system("PAUSE");
return 0;
}
int yu(int a,int b){
return (a&b)!=0;
}
int isPRIVATE(int a){
return yu(a,PRIVATE);
}
int isPublic(int a){
return yu(a,PUBLIC);
}
int isFINAL(int a){
return yu(a,FINAL);
}
int isSTATIC(int a){
return yu(a,STATIC);
}
这段代码定义了4个标识符,private,public,static,final
首先有一个方法(这里没写出来,java类中有)可以获取一个方法的标识符属性,例如public static void main中就有public和static,返回值包含这两项。
上面在定义4个标识符的时候,使用了1,2,4,8来表示,这4个数的特点是,二进制表示中只有一位是1,其他位是0.
返回值包含public和static时,通过或运算,即可让返回值包含这两项结果
PUBLIC|STATIC =
0010
1000
--------------------
1010
上面的结果就是10(或运算,只要某位是1,结果就是1,只有(0,0)才是0)。
我们需要做的就是,通过结果10,来判断标识符含有那些字段。
这里就需要用到与(&)运算,与(&)运算是二进制表示中,相同的位如果是(1,1),那么这个位的结果是1,(1,0),(0,1),(0,0)的结果都是0.
因而通过这个运算,我们可以判断,一个数字的某位是否为1,想判断哪位,就用那一位是1,其他位是0的数字是做与运算,如00000100,01000000.
如果到这里能明白,就知道如果那一位是1,那么(1,1)的结果肯定是1,那么整体的结果肯定不是0,所以可以根据&的结果!=0来判断。
这种方式的好处是,可以将多种状态放到一个参数上,通过判断参数来确定不同的状态,在某些情况下可以减少参数的个数。
这个方法在JDK的源码中是有的,类名可能是Modifier,感兴趣的可以找找看。
上面代码的运行结果: