精华内容
下载资源
问答
  • 什么是反射

    2020-04-18 21:00:46
    维基百科上反射定义: 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。 难道...

    维基百科上反射的定义:

    在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。

    难道不用反射就不能在运行时访问、检测和修改它本身的状态和行为吗?

    问题的回答,其实要首先理解什么叫访问、检测和修改它本身状态或行为,它的本质是什么?

    实际上,它的本质是程序在运行期探知对象的类型信息和内存结构。不用反射能行吗?可以的!使用汇编语言,直接和内层打交道,可以获取任何信息?但是,当编程迁移到高级语言上来之后,就不行了!只能通过反射来达到此项技能。

    不同语言的反射模型不尽相同,有些语言还不支持反射。《Go 语言圣经》中是这样定义反射的:

    Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法,但是在编译时并不知道这些变量的具体类型,这称为反射机制。

    展开全文
  • 定义 反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许其对内部成员进行操作。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射...

    定义
    反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许其对内部成员进行操作。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会严重影响系统的性能。
    具体而言,反射机制的主要功能主要有:①得到一个对象所属的类,②获取一个类的所有成员变量和方法,③在运行时创建对象,调用对象的方法。

    反射机制的作用:
    1,反编译:.class–>.java
    2,通过反射机制访问java对象的属性,方法,构造方法等;

    先看一下sun为我们提供了那些反射机制中的类:
    java.lang.Class;
    java.lang.reflect.Constructor; java.lang.reflect.Field;
    java.lang.reflect.Method;
    java.lang.reflect.Modifier;

    很多反射中的方法,属性等操作我们可以从这四个类中查询。还是哪句话要学着不断的查询API,那才是我们最好的老师。

    Class c=Class.forName(“Employee”);
    Object o=c.newInstance(); 调用了Employee的无参数构造方法

    方法关键字
    getDeclareMethods() 获得所有的方法
    getReturnType() 获得方法的返回类型
    getParameterTypes() 获得属性的传入参数类型

    构造方法关键字
    getDeclaredConstructors() 获得所有的构造方法
    getDeclaredConstructor(参数类型.class,……) 获得特定的构造方法

    父类和父接口
    getSuperclass() 获取某类的父类
    getInterfaces() 获取某类实现的接口
    这样我们就可以获得类的各种内容,从而进行反编译
    反射机制获取类的方法有三种,我们分别展示如何获取Reflection包下的Student类

    Class.forName(“类的路径”)
    Class Student = Class.forName(“Reflection.Student”); //包名+类名
    类名.class
    Class Student = Reflection.Student.class;
    类实例.getClass()
    Student student = new Student(); Class Student =student.getClass();

    Class类中的6个重要方法
    1.getName()方法,返回一个String字符串,显示该类的名称。
    1.System.out.println(Student.getName()); //输出: Reflection.Student
    2.newInstance()方法, 由类调用该方法,根据该类的默认构造函数创建类的实例
    Object o = Student.newInstance();
    3.getClassLoader()方法,返回该类对象的对应的加载器。

    4.getComponentType()方法,返回类的组件类型的数组,如果这个类并不代表一个数组类,此方法返回null。
    5.getSuperClass()方法,返回某子类所对应的直接父类所对应的Class对象。
    6.isArray()方法,判定此Class对象所对应的是否是一个数组对象。

    反射机制获取类的方法
    获取类的构造方法
    getDeclaredConstructors() //获取类的所有构造方法
    getDeclaredConstructor(参数类型.class,……) //获取特定的构造方法

    获取类的普通方法
    getDeclaredMethods() //获取所有普通方法
    getDeclaredMethod(“方法名”,参数类型.class,……) //获取指定名称的方法
    getReturnType() //获取方法的返回类型
    getParameterTypes() //获得方法的传入参数类型

    new 创建对象,是静态加载类,在编译时刻就需要加载所有可能使用到的类

    通过动态加载类可以解决该问题。通过类类型创建该类的对象
    1、静态加载类,是编译时刻加载;动态加载类,是运行时刻加载
    2、new创建对象:是静态加载类,在编译时刻就需要加载所有的【可能使用到的类】。有一个类有问题(如不存在),都不能通过编译,会报错。
    3、Class.forName()通过动态加载类,可以用到一个类时,才进行加载。

    展开全文
  • Java反射概念

    2020-10-13 22:13:30
    1. 反射机制的概念: 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java...

    纯java小白,有很多地方有错,望大佬轻喷,内容都是本人经过查阅资料且结合课堂知识写作,理解不够深厚,不足之处请指出,谢谢!

    1. 反射机制的概念:

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

    2.反射机制动态与静态的区别:

    ①-动态语言-
    可以在运行时改变其结构的语言。例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。
    ②-静态语言-
    运行时结构不可变的语言就是静态语言。如Java、 C、C++。Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更加灵活!

    3.反射机制的作用:

    ① 在运行时判断任意一个对象所属的类;
    ② 在运行时构造任意一个类的对象;
    ③ 在运行时判断任意一个类所具有的成员变量和方法;
    ④ 在运行时调用任意一个对象的方法;
    ⑤ 生成动态代理。
    ⑥ 在运行时处理注解。
    ⑦ 在运行时获取泛型信息。

    4.反射机制的优缺点:

    ①-优点-
    可以实现动态创建对象和编译,体 现出很大的灵活性。
    ②-缺点-
    对性能有影响。使用反射基本上是一种“解释”操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是“慢于”直接执行相同的操作。

    反射机制的相关API:

    ①java.lang.Class :代表一个类。
    ②java.lang.reflect.Method :代表类的方法。
    ③java.reflect.Field :代表类的成员变量。
    ④java.lang.reflect.Constructor :代表类的构造器。

    1. InterFace接口:
      在这里插入图片描述

    2. Person类:
      在这里插入图片描述
      在这里插入图片描述

    3. 获取类的三种方法:
      在这里插入图片描述

    运行结果:
    在这里插入图片描述

    4.获取所有的方法:getMethods()
    在这里插入图片描述

    5.获取所有实现的接口:getInterfaces()
    在这里插入图片描述

    本人还在写作中,后续请等待

    展开全文
  • 一、什么是java中的反射 Java 反射,就是在运行状态中。 获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等 获取任意对象的属性,并且能改变对象的属性 调用任意对象的方法 判断任意...

    一、什么是java中的反射

    Java 反射,就是在运行状态中。

    • 获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等

    • 获取任意对象的属性,并且能改变对象的属性

    • 调用任意对象的方法

    • 判断任意一个对象所属的类

    • 实例化任意一个类的对象

    • Java 的动态就体现在这。通过反射我们可以实现动态装配,降低代码的耦合度;动态代理等。反射的过度使用会严重消耗系统资源

      JDK 中 java.lang.Class 类,就是为了实现反射提供的核心类之一。

      获取 Class 的方法 、一个 jvm 中一种 Class 只会被实例化一次

    二、反射的一些常用方法

    1.获取Class的实例(三种)

    Class c = 类名.class;
    Class c = Class.forName("类的全限定类名");
    Class c = 对象.getClass();
    

    2.获取对象的类名

    String className = c.getName();//获取全限定类名
    String className = c.getSimpleName();//获取简单类名
    

    3.获取Field(属性)

    Field field = c.getField("属性名");//通过属性名获取public的属性
    Field[] field1 = c.getFields();//获取所有的public修饰的属性
    Field[] field2 = c.getDeclaredFields();//获取类所有的属性(包括各种访问修饰符修饰的属性)
    

    3.1.Field的相关方法

    String name = field.getName();  //获取属性名
    Class<?> type = field.getType();  //获取属性的类型
    Object value = field.get(obj);    //获取obj对象的field属性的值
    field.set(obj,Object value);    //给obj对象的field属性赋值value
    

    3.2.设置可访问性

    //默认为false只能对public修饰的操作,设置true可对private修饰的操作
    field.setAccessible(true);  //可以用在被访问修饰符修饰的地方,
    
    

    4.Class获取Constructor

    方法说明
    getConstructor(Class<?> … parameterTypes)获取类中public修饰的,指定参数类型的构造方法
    getConstructors()获取类中public修饰的所有构造方法
    getDeclaredConstructor(Class<?>… parameterTypes)获取类中指定参数类型的构造方法,无关修饰
    getDeclaredConstructors()获取类的所有构造方法,无关修饰

    5.Class获取Method

    方法说明
    getMethod(String name, Class<?>… parameterTypes)根据方法名,方法参数获取对应方法。范围:本类和所有继承类的public所修饰的方法
    getMethods()获取所有的方法 。范围:本类和所有继承类的public所修饰的方法
    getDeclaredMethod(String name, Class<?>… parameterTypes)根据方法名,方法参数获取对应方法。范围:本类所有的方法,无关修饰
    getDeclaredMethods()获取本类中所有的方法

    5.1.Method的相关方法

    方法说明
    getName()获取方法名
    isVarArgs()如果该方法声明为采用可变数量的参数,则返回true; 否则返回false
    getModifiers()获取权限修饰符
    getReturnType()获取返回类型
    getExceptionTypes()获取所有抛出的异常类型
    getParameterTypes()获取所有参数的类型
    getParameterCount()获取所有参数的个数
    getAnnotations()获取修饰该方法的注解集合
    getAnnotation(Class annotationClass)获取指定的注解信息
    getDeclaringClass获取方法所在的类的.class对象
    invoke(Object obj, Object… args)执行底层的方法(反射类的方法,注意访问权限,是否给予参数)Object o:类的实例,c.getDeclaredConstructor().newInstance(),注意原来的c.newInstance()从jdk1.9开始已过期

    6.Class获取包名

    Class<?> c = Class.forName("java.lang.String");
    Package cpackage = c.getPackage();
    System.out.println(cpackage.getName()); //获取包名
    System.out.println(c.getPackageName());//获取包名
    

    7.获取类加载器

    Class c = Test.class;
    ClassLoader loader = c.getClassLoader(); //获取类加载器
    System.out.println(loader.getName());//获取加载器的名称
    

    8.获取注解

    Class c = Test.class;
    Annotation[] annotations = c.getAnnotations();//返回 直接存在于此元素上的注解
    Annotation[] annotations = c.getDeclaredAnnotations();//返回此元素上 存在的注解(有可能是继承的)
    
    展开全文
  • Java 反射机制是 Java 语言的一个重要特性,它在服务器程序和中间件程序中得到了广泛运用。在服务器端,往往需要根据客户的请求,动态调用某一个对象的特定方法。此外,在 ORM 中间件的实现中,运用 java 反射机制...
  • 什么是反射?什么Java反射

    万次阅读 2018-06-11 22:16:31
    什么是反射(Reflection )?主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射?在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一...
  • 反射概念2. 反射之Class对象2.1 Java代码在计算机的三个阶段2.2 获取Class对象的三种方式3. 反射之Class对象功能3.1 构造方法的获取与使用3.2 成员方法的获取与使用3.3 成员变量的获取与使用4. 综合案例 1. 反射...
  • 什么是Java的反射机制

    千次阅读 2018-05-24 20:37:58
    Java反射机制是Java的特点,是框架实现的基础,百度结果:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的...
  • 1.什么是反射 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java...
  • java中反射概念

    2011-08-01 17:09:09
    反射概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp...
  • Java反射概念和作用

    2021-04-06 10:22:56
    一、反射概念 反射是一种计算机的处理方式,是程序可以访问、检查和修改本身状态或行为的一种方式。 Java 的反射可以在运行时加载,探知和使用编译期间完全未知的类。 对于一个已经加载的类,可以知道类的所有...
  • 本篇主要介绍java反射机制的定义,为什么要使用反射。要明白反射要先了解类加载器,下面先谈谈类的加载器,运行java程序时,就要加载程序的里面的类,类就是通过加载器来加载的,类加载器主要有以下三种。 1....
  • 反射什么?有什么用?

    千次阅读 2020-02-06 11:04:47
    今天想来总结一下反射什么?以及如何使用? 概念:  在Java里面一个类有两种状态,它们分别是编译和运行状态,通常我们需要获取这个类的信息都是在编译阶段获得的,也就是直接点出来或者new出来,可是如果需要...
  • 反射机制介绍 JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java ...
  • 【java反射反射是啥?是干啥用的?

    万次阅读 多人点赞 2019-01-04 21:45:24
    反射什么呢? 不知道大家是否还记得上图,这是刚接触java时学到的知识。我自己的理解是现在是知道1,反推到2,然后再通过2得到一些别的信息。(这只是我的推测,至于具体是不是,还需日后深究) 类比到现实中的...
  • 什么是反射机制,有什么作用

    千次阅读 2017-08-06 22:27:32
    1. 反射机制定义反射概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改其本身状态或行为的一种能力。在Java环境中,反射机制允许程序在执行时获取某个类自身的定义信息,例如熟悉和方法等也可以...
  • 反射:反射定义

    千次阅读 2017-05-29 10:24:15
    1.引出反射 问题1: 1.对象有编译类型和运行类型  Object obj = new java.util.Date();  编译类型: Object  运行类型: java.util.Date  需求:通过obj对象,调用java.util.Date类中的toLocaleString方法.  obj....
  • 什么是反射反射可以做些什么

    千次阅读 2018-07-09 18:52:00
    阅读目录 什么是反射反射能干嘛?获取类型的相关信息获取类型本身信息(命名空间名、全名、是否是抽象、是否是类、、...获取类型成员信息(通过Tyep中的方法GetMembers)动态调用方法调用方式一(使用InvokeMember...
  • java 反射

    2020-12-22 09:34:41
    1. java 反射机制的概念 在java运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法 ;对应任何一个对象,都能调用它的任意方法和属性。这种动态获取信息以及动态调用对象方法的功能成为java反射机制...
  • 什么是反射?一般用来做什么?

    万次阅读 2018-05-08 11:12:40
    1、概念 反射机制指的是程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。 2、作用 a) 获取一个Class对象 1) .getClass()方法,这是一个Object类定义的方法,涉及到强转,用通配符表示泛型...
  • 泛型 反射 概念 方法 使用
  • 主要介绍了Java反射机制概念、原理与用法,较为详细的分析了java反射机制的概念、原理,并结合实例形式总结分析了java反射机制的具体使用方法与相关注意事项,需要的朋友可以参考下
  • 在说反射之前,我们要先了解动态语言和静态语言的概念: 动态类型语言 所谓动态类型语言,就是类型的检查是在运行时才做。 动态类型在解释语言中极为普遍,如 JavaScript、Perl、Python、Ruby 等等 静态类型语言 ...
  • JAVA反射机制作用是什么

    万次阅读 多人点赞 2015-10-30 21:10:39
    那么什么是Java的反射呢?  大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了
  • 文章目录反射定义什么是“正射”反射的作用 反射的定义 计算机科学中的反射(reflection) 指计算机程序在运行时(runtime) 可以访问、检测和修改它本身状态或行为的一种能力。通俗说,反射就是程序在运行的时候...
  • 本文实例讲述了C#定义简单的反射工厂用法。分享给大家供大家参考。具体分析如下: 首先,定义一个水果抽象类,代码如下: class Fruit { //定义虚方法 public virtual void Eating() { Console.WriteLine(水果...
  • 反射中获取class对象的三种形式: 1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 多用于配置文件,将类名定义在配置文件中。读取文件,加载类 2. 类名.class:通过类名的属性class获取 多...
  • 反射概念和作用

    2020-04-22 13:46:51
    反射概念反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改...
  • 本文实例讲述了PHP进阶学习之反射基本概念与用法。分享给大家供大家参考,具体如下: 一、前言 Reflection(反射)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,764
精华内容 127,905
关键字:

反射的概念是什么