精华内容
下载资源
问答
  • 复杂反射的意义
    千次阅读
    2019-03-04 01:07:13

    1、反射的应用场合:在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息.

    2、反射的作用:通过反射可以使程序代码访问装载到JVM 中的类的内部信息

    获取已装载类的成员变量信息

    获取已装载类的方法

    获取已装载类的构造方法信息

    反射的缺点

    性能问题

    使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。

    使用反射会模糊程序内部逻辑

    程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。

    更多相关内容
  • 反射的作用及意义

    千次阅读 2020-11-05 08:51:28
    1.反射的定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射...

    1.反射的定义:

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。

    反射的应用场合:在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息.

    在运行阶段使用,不能写死;工厂模式,动态生成对象;框架底层;运行过程中修改jar包中的一些内容(由于反射会额外消耗一定的系统资源,因此如果不需要动态地创建一个对象,那么就不需要用反射。

    另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。)

    2.反射的功能:

    在运行时判定任意一个对象所属的类;
    在运行时构造任意一个类的对象;
    在运行时判定任意一个类所具有的成员变量和方法;
    在运行时调用任意一个对象的方法;
    生成动态代理。

    3.主要用途:

    反射最重要的用途就是开发各种通用框架。
    例子:
    1)比如在spring中,我们将所有的类Bean交给spring容器管理,无论是XML配置Bean还是注解配置,当我们从容器中获取Bean来依赖注入时,容器会读取配置,而配置中给的就是类的信息,spring根据这些信息,需要创建那些Bean,spring就动态的创建这些类。还有在struts2的struts.xml中配置action,也是通过反射调用的action。

    2)还有在我们创建数据库链接时,这句代码Class tc = Class.forName(“com.java.dbtest.TestConnection”)就是告诉JVM去加载这个类,而加载的过程是在程序执行过程中动态加载的。通过类的全类名让jvm在服务器中找到并加载这个类,而如果是使用别的数据库,那就要换一个类了,如果是传统写死的方法创建,就要修改原来类的代码,而对于反射,则只是传入的参数就变成另一个了而已,可以通过修改配置文件,而不是直接修改代码。

    3)再比如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。只是如果这个类还没有,获取时会获取不到,但不会导致编译错误,更不会导致程序的崩溃。

    4)还有当我们在使用 IDE(如 Eclipse\IDEA)时,当我们输入一个队长或者类并向调用它的属性和方法时,一按 (“.”)点号,编译器就会自动列出她的属性或方法,这里就会用到反射。

    4.基本反射功能的实现(反射相关的类一般都在java.lang.relfect包里):

    getName()获得类的完整名字

    getPackage()获取此类所属的包

    getSuperclass()获得此类的父类对应的Class对象

    getField(String name)获得类的指定属性

    getMethods()获得类的public类型的方法

    getMethod (String name,Class [] args)获得类的指定方法

    每个Method对象对应一个方法,获得Method对象后,可以调用其invoke() 来调用对应方法

    Object invoke(Object obj,Object [] args):obj代表当前方法所属的对象的名字,args代表当前方法的参数列表,返回值Object是当前方法的返回值,即执行当前方法的结果。

    1、获得Class对象

    使用Class类的forName静态方法

    直接获取某一个对象的class

    调用某个对象的getClass()方法

    2、判断是否为某个类的实例

    用instanceof关键字来判断是否为某个类的实例

    3、创建实例

    使用Class对象的newInstance()方法来创建Class对象对应类的实例。

    先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例。

    4、获取方法

    getDeclaredMethods()

    5、获取构造器信息

    getDeclaredMethods()

    getMethods()

    getMethod()

    6、获取类的成员变量(字段)信息

    getFiled: 访问公有的成员变量

    getDeclaredField:所有已声明的成员变量。但不能得到其父类的成员变量

    getFileds和getDeclaredFields用法

    7、调用方法

    invoke()

    8、利用反射创建数组

    Array.newInstance()

    5.反射的缺点:

    1)使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。

    2)使用反射会模糊程序内部逻辑

    3)程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。

    展开全文
  • 将含有双参数的柯西分布替代常规高斯分布...偏振场景仿真结果较为理想,得到的目标红外偏振特性与实际图像基本吻合,表明采用的模型及算法适用于红外偏振的研究,对分析复杂目标长波红外偏振物理特性具有重要的理论意义
  • 回波损耗、反射系数、电压驻波比以及S参数的物理意义.doc
  • 私有(private)属性及方法可以通过反射访问,那么private的意义是什么? 在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与...

    私有(private)属性及方法可以通过反射访问,那么private的意义是什么?

    在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但是通过反射机制可以知到这个类中的所有属性和方法。在运行过程中,对于任何一个类。都能够知道这个类的所有属性和方法,对于任何一个对象,都能够调用它的任何一个方法和属性这种动态获取的信息以及动态调用对象的方法的功能成为Java的反射机制。

    那么反射机制的存在跟private访问修饰矛盾吗?

    当然不矛盾。首先private的存在并不是为了实现Java程序的完全安全,Java的安全机制是层层相扣、十分复杂的。private只是为了Java的正常开发过程中的一种约束,也是符合OOP(面向对象编程)的封装,实现内部的部分不可见。就好比超市仓库会挂一个牌子“闲人免进”,但是如果非要进去的话也不是不行。而且在java开发过程中有时候确实会需要用的反射机制的功能,比如测试/性能等场景下。

    参考文章
    链接: Java-利用反射访问类的私有(private)属性及方法&private的意义

    展开全文
  • Java——反射意义及优缺点

    万次阅读 多人点赞 2018-12-15 17:26:54
    意义: 1.增加程序的灵活性,避免将程序写死到代码里。 例:定义了一个接口,实现这个接口的类有20个,程序里用到了这个实现类的地方有好多地方,如果不使用配置文件手写的话,代码的改动量很大,因为每个地方都要...

    意义:

    1.增加程序的灵活性,避免将程序写死到代码里。

    例:定义了一个接口,实现这个接口的类有20个,程序里用到了这个实现类的地方有好多地方,如果不使用配置文件手写的话,代码的改动量很大,因为每个地方都要改而且不容易定位,如果你在编写之前先将接口与实现类的写在配置文件里,下次只需改配置文件,利用反射(java API已经封装好了,直接用就可以用 Class.newInstance())就可完成。

    2.代码简洁,提高代码的复用率,外部调用方便

    package cn.yonyong.reflection.testdemo;
    
    interface Fruit { //水果接口
      public void eat() ; //吃水果
    }
    
    class Apple implements Fruit{ //定义苹果
      public void eat() {
        System.out.println("**吃苹果。"); 
      } 
    }
    
    class Orange implements Fruit{
      public void eat() {
        System.out.println("**吃橘子。"); 
      }
    }
    
    class Factory{
      public static Fruit getInstance(String className){
        Fruit fruit = null ;
        try{
          fruit = (Fruit) Class.forName(className).newInstance() ;
        }catch(Exception e ){
          e.printStackTrace() ;
        }
        return fruit ;
      }
    }
    
    public class FactoryDemo{
      public static void main(String args[]){
      //通过工厂类取得接口实例,传入完整的包.类名称
        Fruit f = Factory.getInstance("cn.yonyong.reflection.testdemo.Apple") ;
        if(f!=null){ //判断是否取得接口实例
          f.eat() ;
        }
      }
    }

    如果不用反射,那么我们如果再加一个西瓜类,就得在Factory里判断,每添加一个类都要修改一次Factory,但用了反射只用在调用的时候传入完整的类名就可完成。结果:用反射,修改一处代码;不用反射,修改两处代码。

    3.对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法

     

     

    反射的缺点

    性能问题

    1.使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。

    2.反射包括了一些动态类型,所以JVM无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多。我们应该避免在经常被 执行的代码或对性能要求很高的程序中使用反射。

    使用反射会模糊程序内部逻辑

    程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。

    安全限制

    使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有安全限制的环境中运行,如Applet,那么这就是个问题了

    内部暴露

    由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用--代码有功能上的错误,降低可移植性。反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。

     

    Java反射可以访问和修改私有成员变量,那封装成private还有意义么?

    既然小偷可以访问和搬走私有成员家具,那封装成防盗门还有意义么?这是一样的道理,并且Java从应用层给我们提供了安全管理机制——安全管理器,每个Java应用都可以拥有自己的安全管理器,它会在运行阶段检查需要保护的资源的访问权限及其它规定的操作权限,保护系统免受恶意操作攻击,以达到系统的安全策略。所以其实反射在使用时,内部有安全控制,如果安全设置禁止了这些,那么反射机制就无法访问私有成员。

     

    反射是否真的会让你的程序性能降低?

    1.反射大概比直接调用慢50~100倍,但是需要你在执行100万遍的时候才会有所感觉

    2.判断一个函数的性能,你需要把这个函数执行100万遍甚至1000万遍

    3.如果你只是偶尔调用一下反射,请忘记反射带来的性能影响

    4.如果你需要大量调用反射,请考虑缓存。

    5.你的编程的思想才是限制你程序性能的最主要的因素

    展开全文
  • 在真空紫外和软X线区镜子表面的反射和散射研究,不论在理论上和实际应用上,都有重要意义。近几年来,随着X线天文望远镜和同步辐射实验装置的兴起,对超光滑表面镜子的加工和测试进行了大量的研究工作。这是因为在上述...
  • 0064-041 前言 自适应光学是新近发展起来的一种集光学、机械与电学为一身的技术,一方面由于没有一种技术能同时对其中的核心部件如可变形反射镜、控制系统及波前探测器等进行制造,这就决定了其系统既复杂又昂贵,极...
  • 非线性微分系统解的几何性态在理论和应用中有着重要意义.利用反射函数理论,研究非线性微分系统具有满足特定关系式的反射函数的充要条件,并应用所得结论讨论周期非线性微分系统周期解的几何性态,建立该系统周期解...
  • 为了充分利用大炮检距信息对复杂地质条件下的地下构造进行叠加成像,基于传统的零偏移距共反射面元(ZO CRS)叠加提出共偏移距共反射面元(CO CRS)叠加方法。对叠加剖面的每个成像点确定叠加算子相应的5个参数是CO CRS...
  • 目标区为含煤系地层,发育4+5号和8+9号2套较稳定的煤层,根据这2套较稳定煤层的地震反射标志层的同相轴特征,进行合成地震记录标定,并识别出标志层,以建立井震格架为基础,从连井骨干剖面开始解释,到加密解释的方法,进行...
  • 这篇博文是对magazine文章: 《Towards Smart and Reconfigurable Environment: Intelligent Reflecting Surface Aided Wireless Network》的读后感记录,也借此理解智能反射面这个新兴的topic。 文章目录智能反射面...
  • 塔里木盆地克深地区地表起伏大、地下构造复杂,造成资料采集困难。针对工区资料信噪比低、成像不精确。的问题,采用已有的采集资料进行叠前深度偏移退化性处理...研究结果对提高复杂山地地震资料采集质量具有指导意义
  • 我会持续更新,欢迎star!...2. 反射原理大解析2.1 反射的常用类和函数2.2 Class 类包含的方法2.3 反射的主要方法2.3.1 得到构造器的方法2.3.2 获得字段信息的方法2.3.3 获得方法信息的方法2.4 反射实战的基.
  • 反射效果,是一个渲染中很重要的一个效果。在表现光滑表面(金属,光滑地面),水面(湖面,地面积水)等材质的时候,加上反射,都可以画面效果有很大的提升。来看几张图: 先来张最近比较火爆的国产大作《逆水寒...
  • 在深入研究.NET反射技术基础上,结合.NET框架结构的特性,从资源整合的角度,探索性地提出了一种新型的软件系统维护模式,保证了复杂的大型系统维护的高效性和经济性,具有很大的实际意义
  • 详谈C#反射及应用

    万次阅读 2021-09-10 20:58:17
    反射 什么是元数据?什么是反射? 程序数用来处理数据的,文本和特性都是数据,而程序本身(类的定义和BLC中的类)这些也是数据。 有关程序及其类型的数据被称为元数据,他们保存在程序集中。 程序在运行时,可以...
  • 最容易理解的反射机制的底层原理

    千次阅读 2020-05-21 15:36:14
    看了好多关于Java反射机制的文章,大多都太过官方,消化起来比较稍显费劲,本篇,我会依据自己的理解去阐述什么是Java的反射机制,反射用在什么地方,以及怎么来使用? 开篇前,我们还是要了解一下,什么是Java的...
  • 反射

    千次阅读 2018-06-21 21:09:40
    对环境进行采样。使用反射探测器。创建粗糙和平滑的镜子。...有些时候,你需要对自反射做些工作环境贴图目前,我们的着色器通过组合物体表面上的环境光、漫反射光和镜面反射光来对片段进行着色。这至少对...
  • 反射机制常用方法与示例

    千次阅读 2019-12-15 01:50:11
    反射机制如果只是针对于普通开发者而言,意义不大,一般都是作为一些系统的架构设计去使用的,基本所有开源框架,几乎都是反射机制。 反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释...
  • 基于SDR的智能反射面波束成形设计

    千次阅读 多人点赞 2021-10-28 18:15:27
    文章开头部分花了一些篇幅介绍使用智能反射面(IRS/RIS) 的各种优势与不足,这些就不再过多介绍, 直接进入正题, 即算法部分。 文章考虑了上图这样一个系统: 窄带, 一个基站在一个IRS的帮助下 服务于 多个 单...
  • UE4反射系统简析(含实例过程分析)

    万次阅读 多人点赞 2016-10-23 15:44:25
    一、UE4中的反射系统 1.简述: 1.1 什么是UE4反射 在UE4里面,你无时无刻都会看到类似UFUNCTION()这样的宏。官方文档告诉你,只要在一个函数的前面加上这个宏,然后在括号里面加上BlueprintCallable就可以在编辑器...
  • 我所理解的 C++ 反射机制

    万次阅读 多人点赞 2016-06-17 11:17:06
    1.前言在实际的项目中,听到师兄说C++中用到了反射,出于好奇,就查阅相关资料,发现强大的C++本身并不支持反射,反而Java支持反射机制。当我得知这个事实时,一直唯C++马首是瞻的我,心中暗自落泪,悲叹不已。但是...
  • 运用复杂网络的理论来研究客户网络的建立和发展复杂客户网络,通过对复杂客户网的小世界和无标度性质的分析来证实客户网络是一个复杂网络。并具备点分布、平均路径长度、聚集数等拓扑性质,研究结论对于企业赢得客户...
  • C++反射机制的实现

    万次阅读 多人点赞 2016-06-20 10:03:26
    Java中有天然的反射机制,因为Java本身就是半编译语言,很多东西可以在运行时来做,但是c++就不同了。要建立c++的反射机制,就需要登记每个类名与对象的对应关系。 1.前言 在实际的项目中,听到师兄说C++中用到了...
  • Java反射机制与安全问题

    千次阅读 2020-04-13 09:47:08
    Java反射机制与安全问题 0x00前言 近日,笔者在总结Java反序列化漏洞的过程中发现一个怎么也绕不开的词“Java反射机制“,以前笔者只知道这是一个实现Java”准动态“语言,方便开发人员调试程序的机制而已,没想到...
  • Java反射机制的原理和用途

    千次阅读 2019-03-21 14:15:28
    看了好多关于Java反射机制的文章,大多都太过官方,消化起来比较稍显费劲,本篇,我会依据自己的理解去阐述什么是Java的反射机制,反射用在什么地方,以及怎么来使用? 开篇前,我们还是要了解一下,什么是Java的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,245
精华内容 16,498
关键字:

复杂反射的意义