java的变量名,函数名等在编译时并不会按照程序员自己给的名字编译,相反,编译器会一一做替换,比如你的public void fun( String str);中的变量名str在编译之后就不叫str了,而可能是arg0,arg1.
parameter反射实例
输出结果:
可以看到,参数修饰符的值无法获取,参数的名字被改为arg0等
解决方法,jdk版本换为1.8,在myeclipse的首选项中做如下配置
重新编译运行,输出为
其中Parameter.isNamePresent() 来验证参数名是不是可用。之前全是false,现在全是true。并且获取了参数的真实名字和参数修饰符的值。
参数修饰符
PUBLIC: 1 (二进制 0000 0001)
PRIVATE: 2 (二进制 0000 0010)
PROTECTED: 4 (二进制 0000 0100)
STATIC: 8 (二进制 0000 1000)
FINAL: 16 (二进制 0001 0000)
SYNCHRONIZED: 32 (二进制 0010 0000)
VOLATILE: 64 (二进制 0100 0000)
TRANSIENT: 128 (二进制 1000 0000)
NATIVE: 256 (二进制 0001 0000 0000)
INTERFACE: 512 (二进制 0010 0000 0000)
ABSTRACT: 1024 (二进制 0100 0000 0000)
STRICT: 2048 (二进制 1000 0000 0000)
Modifier.toString
将以上代码中的(parameter.getModifiers()))改为
Modifier.toString(parameter.getModifiers()));
那么输出将变成
Modifier.toString将变量修饰符的数值转换为字符