简单反射与复杂反射的区别和联系
简单反射和复杂反射都是光线从界面反射回来的现象,其主要区别在于光线在反射时经过的路径是否发生改变。
简单反射指的是光线从一个界面反射回来,光线在反射时经过的路径不发生改变,反射光与入射光的角度相等,反射后的光线与入射光线在同一平面内,反射光线的方向与入射光线的方向相反。
复杂反射则是指光线在反射时,经过了多个界面的反射,发生了路径的改变。例如,当光线从一个不透明的表面反射回来时,它可能会经过多个微小的起伏和曲面,导致反射光的方向发生改变。
联系:简单反射和复杂反射都是反射现象,都符合反射定律,都可以用光线追踪等方法进行计算和分析。
区别:简单反射只发生在一个界面上,而复杂反射则涉及到多个界面的反射,导致光线路径的改变。
简单反射指先天形成的,不需要大脑皮层中高级中枢参与的反射。复杂反射指后天形成的,需要大脑皮层中高级中枢参与的反射。反射的结构基础是反射弧,反射弧都有着共同的结构模式:感受器→传入神经→神经中枢→传出神经→效应器。反射是在反射弧的基础上建立起来的。
1. 执行速度:简单反射的执行速度更快,因为它直接通过方法调用来执行,而复杂反射需要先获得方法的Method对象,然后再调用invoke来执行,所以速度相对较慢。
2. 安全性:简单反射的方法调用不会做任何安全检查,而复杂反射需要在调用invoke()方法前需要设置访问权限,所以安全性更高。
3. 调用方式:简单反射直接通过方法名和参数来调用,而复杂反射需要先获取Method对象,然后通过invoke()方法来调用。
4. 功能:简单反射只能调用 public 方法,而复杂反射可以调用任意访问权限的方法(需要设置访问权限)。复杂反射还可以调用构造方法、获取注解信息等,功能更强大。
总结来说:
在一个类中如何调用另一个类的私有方法
//测试类
class MyTest {
public void publicMethod(Object o) {
System.out.println("调用的公共方法 " + o);
}
/**
* 类的私有方法
*/
private void privateMethod(Object o) {
System.out.println("调用了私有方法 " + o);
}
}
新建main方法
import java.lang.reflect.Method;
public class ReflectionTest {
public static void main(String args[]) throws Exception{
MyTest myTest = new MyTest();
// 调用公共方法
myTest.publicMethod("传入参数");
// 编译报错
// myTest.privateMethod();
// 获得类的私有方法
Method method = MyTest.class.getDeclaredMethod("privateMethod",Object.class);
// 开启私有访问权限
method.setAccessible(true);
method.invoke(myTest,"传入参数");
}
}
只能通过反射才能调用私有方法
到此,以上就是小编对于java反射method invoke的问题就介绍到这了,希望介绍的2点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。