android中反射的一些基本常识

反射的作用

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!");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36333289/article/details/108226137