前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[javaSE] 看知乎学习反射

[javaSE] 看知乎学习反射

作者头像
唯一Chat
发布2019-09-10 15:24:48
9390
发布2019-09-10 15:24:48
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

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

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

余晖:

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

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

松鼠奥利奥:

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

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

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

vczh:

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

倪炜:

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

java版:

代码语言:javascript
复制
package com.tsh.test;



import java.lang.reflect.Method;


public class Home {

    public static void main(String[] args) {
        Test2 t=new Test2();
        t.say();
    }

}
class Test{
    
    public Test() {
        super();
    }
    public void say(){
        
    }
}
//使用反射获取Test类的方法
class Test2{
    public void say(){
        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版:

代码语言:javascript
复制
<?php
namespace one;
class Test{
    public function __construct(){

    }
    public function say(){

    }
}
$reflectionClass=new \ReflectionClass("\one\Test");
print_r($reflectionClass->getMethods());
?>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档