反射的作用
1.private的作用是限制权限,防止那些不了解的人不正当错误地使用我的方法。
反射是给了解代码的人开个后门。
2.反射的风险与责任:使用反射调用私密方法的人是自己承担风险,而调用public方法出了问题是需要写这个方法的人负责的
3.隐藏代码hidden:谷歌在开发源码的时候有很多隐藏的代码,目的是为了防止应用层的开发者在不了解的情况下调用该方法、或者隐藏一些在后期不确定是否保留的一些方法。但是这些方法做framwork层开发的人会用到,他们不想用发射去调用,那样效率也低。所以有了隐藏public方法这种机制的出现。
try {
Class utilsClass = Class.forName("com.example.hidden.Utils");
//获取第一个构造方法
Constructor utilsConstructor = utilsClass.getDeclaredConstructors()[0];
//解除限制,可以使用私有构造方法
utilsConstructor.setAccessible(true);
Object utils = utilsConstructor.newInstance();
Method shoutMethod = utilsClass.getDeclaredMethod("shout");
//解除限制,可以使用私有方法
shoutMethod.setAccessible(true);
shoutMethod.invoke(utils);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
package com.example;
class Utils {
Utils(){
}
void shout(){
System.out.println("I`m shouting!");
}
}