java反射机制 知乎_[javaSE] 看知乎学习反射详解

简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。

知乎:学习java应该如何理解反射?

余晖:

反射提供了一种运行期获取对象元信息的手段。写框架代码用的比较多,因为需要运行时动态获取和操作对象的属性和方法。尽量少用反射,会有性能开销,大多数场景下可以用设计模式代替

知乎:Java反射到底慢在哪里?

松鼠奥利奥:

对于 Java 的依赖注入容器而言,反射慢在把装载期做的事情搬到了运行期。但这是没有选择的事情,对于 Java 这样的静态语言,如果不这样“搬”,模块将难以被 Mock,从而难以写自动化的单元测试。

动态语言中很少有“依赖注入”的概念了(PHP 这种全盘照抄 Java 的除外),因为 Python、Ruby 这类的动态语言实际上没有装载期,所有装载的事情都是放在运行期做的(比如 import 模块、构造类和函数等)。实际上很少人会去抱怨 Python 写的 Web 应用装载模块太慢,反而很多时候用动态语言的开发者会非常频繁地使用反射和元编程节省编码时间、增加灵活性。因为对于服务器端应用而言,装载是一次性的事情,即使是很慢也只是增加了启动时间。一旦服务器进入运转状态,就没有更多的额外开销了。

知乎:大型多人项目中使用反射机制有什么利弊?

vczh:

反射是用来做library的,不是用来做业务的。程序员就是控制不住自己啊,东西放在那里就一定要用,不然就手痒。

倪炜:

反射机制一般用在逻辑比较固化的框架层面的,业务层面用反射有点蛋疼和装逼了。性能倒不是什么大问题,主要缺陷是反射使静态分析代码执行路径更困难。

java版:

packagecom.tsh.test;importjava.lang.reflect.Method;public classHome {public static voidmain(String[] args) {

Test2 t=newTest2();

t.say();

}

}classTest{publicTest() {super();

}public voidsay(){

}

}//使用反射获取Test类的方法

classTest2{public voidsay(){try{

Class c=Class.forName("com.tsh.test.Test");

Method[] methods=c.getMethods();for(Method m:methods){

System.out.println(m.getName());

}

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

}

}

PHP中反射是什么?

它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释

PHP版:

namespace one;classTest{public function__construct(){

}public functionsay(){

}

}$reflectionClass=new \ReflectionClass("\one\Test");print_r($reflectionClass->getMethods());?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值