反射机制

java中的反射

白昼怎懂夜的黑 提交于 2019-11-29 05:59:00
什么是java反射? 反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中,对于任意一个类,都能够知道这个类的所以属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫Java的反射机制。 1. 反射机制的功能   Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法。 生成动态代理。   2. 实现反射机制的类   Java中主要由以下的类来实现Java反射机制(这些类都位于java.lang.reflect包中): Class类:代表一个类。 Field类:代表类的成员变量(成员变量也称为类的属性)。 Method类:代表类的方法。 Constructor类:代表类的构造方法。 Array类:提供了动态创建数组,以及访问数组的元素的静态方法。 来源: https://www.cnblogs.com/haoyuecanglang/p/11457555.html

Java反射

本小妞迷上赌 提交于 2019-11-29 05:04:27
Java反射 概念      java反射指的是,在程序运行过程中,程序可以动态地获取任何一个类有哪些方法和属性,对于一个对象可以获取它的属性和方法进行调用,我们把这种动态地获取类的属性和方法的过程叫做 反射机制 。 反射的实现方法   反射一共有三种实现方式:1、通过Class.forName()方法;2、通过getClass()方法;3、通过.Class获取对象。示例如下:   我们先定义一个待通过反射获取的POJO类Person,后面所有有关于反射的演示都是通过该类进行 public class Person { public String name; private int age; private String sex; public Person() { } private Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int

Java基础回顾——反射

本秂侑毒 提交于 2019-11-29 04:59:29
引言: 从大二刚开始接触java,了解其基本语法,到用swing编写图形界面的程序,到JavaWeb用SSH三大框架编写小网站,后面又学SSM,SpringBoot,SpringCloud等。可以说算是对java也不断的了解了,慢慢的入了java这个大坑,感觉还不错😂。虽然学的东西越来越多,但是还是有必要时不时回顾下一些基础。 概述: 反射的概念: 反射库(reflection library) 提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。这项功能被大量地应用于JavaBeans中,它是Java组件的体系结构。使用反射,Java可以支持Visual Basic用户习惯使用的工具。特别是 在设计或运行中添加新类时,能够快速地应用开发工具动态地查询新添加类的能力。能够分析类能力的程序被称为反射(reflective) 。反射机制的功能极其强大。 利用反射机制可以: ●在运行中分析类的能力。 ●在运行中查看对象,例如,编写一个toString方法供所有类使用。 ●实现数组的操作代码。 ●利用Method对象,这个对象很像C++中的函数指针。 ——《Java核心技术 卷1 第八版》 更简单的描述: 反射:将类的各个组成部分封装为其它对象。(其它对象指Class类对象) 反射: 获取字Class对象的三种方法: Java代码在计算机中经历的阶段:

java反射(四)--反射与简单java类

谁说我不能喝 提交于 2019-11-28 23:01:03
一.传统简单java类   简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简单java类的开发,那么也会面临非常麻烦的困难: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename; 7 } 8 9 public void setJob(String job) { 10 this.job = job; 11 } 12 13 public String getEname() { 14 return ename; 15 } 16 17 public String getJob() { 18 return job; 19 } 20 } --按照传统的做法,首先应该实例化Emp对象,而后通过实例化对象进行setter方法的调用来设置属性的内容: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename

java反射(三)--反射与操作类

人走茶凉 提交于 2019-11-28 20:39:27
一.反射与操作类   在反射机制的处理过程之中不仅仅只是一个实例化对象的处理操作,更多的情况下还有类的组成的操作,任何一个类的基本组成结构:父类(父接口),包,属性,方法(构造方法,普通方法) --获取类的基本信息   一个类的基本信息主要包括的是所在的包名称,父类的定义,父接口的定义. --范例:定义一个程序类 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public interface IMessageStrvice { //消息服务 8 void send(); 9 } 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public interface IChannelService { 8 boolean connect(); 9 } 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public class AbstractBase { 8 } 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version

java反射(二)--反射应用案例

走远了吗. 提交于 2019-11-28 20:21:34
一.反射实例化对象   经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义 --反射实例化对象:获取Class对象之后最大的意义并不是在于只是一个对象的实例化操作形式,更重要的是Class类中提供有一个对象的反射实例化方法,在JDK1.9之前的实例化:public T newInstance() throw InstantiationException,IllegalAccessException,该方法代替了new 关键字的使用,但是在JDK1.9之后则发生了变化:class.getDeclaredConstructor().newInstance(); --范例:通过newInstance()方法实例化对象 1 package 反射.认识反射机制.entity; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public class Person { 8 public Person() { //任何情况下只要实例化对象则一定要调用类中的构造方法 9 System.out.println("Person对象实例化了"); 10 } 11 12 @Override 13 public String toString() {

反射与内省

五迷三道 提交于 2019-11-28 20:17:33
1.反射的概念: 反射就是把Java类中的各种成分映射成一个个的Java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息, 利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。 2.Class类 每个类都有自己的Class对象 提供了获取类信息的相关方法 Class类继承自Object类 3.反射的实质 其实每个类都可以看作是一个对象,他们有共同的属性和行为如成员变量,构造方法,普通方法。 然后我们通过类的信息使用3种方法的到这个类的类对象 4.获取类对象的三种方法 Class clazz1=Person.Class; Class clazz2=Class.forName(“url”) throw ClassNotFoundException;推荐使用,耦合性低,容易编译通过 Person p=new Person(); Class clazz3=p.getClass(); 5.获取构造方法,普通方法,属性以及创建对象的方法 首先获取类对象 Class clazz=Class.forName(“url”); clazz.getConstractors(); Constrctor c = clazz.getConStractor(String.class…); 实例化 Object o=c.newInstance();

Go语言基础之反射

£可爱£侵袭症+ 提交于 2019-11-28 19:38:24
Go语言基础之反射 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息。 值信息:程序运行过程中可动态变化的。 反射介绍 反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。 Go程序在运行期使用reflect包访问程序的反射信息。 在上一篇博客中我们介绍了空接口。 空接口可以存储任意类型的变量,那我们如何知道这个空接口保存的数据是什么呢? 反射就是在运行时动态的获取一个变量的类型信息和值信息。 reflect包 在Go语言的反射机制中,任何接口值都由是 一个具体类型 和 具体类型的值 两部分组成的(我们在上一篇接口的博客中有介绍相关概念)。 在Go语言中反射的相关功能由内置的reflect包提供, 任意接口值在反射中都可以理解为由 reflect.Type 和 reflect.Value 两部分组成,并且reflect包提供了 reflect.TypeOf 和 reflect.ValueOf 两个函数来获取任意对象的Value和Type。 TypeOf

java反射(一)--认识反射机制

自作多情 提交于 2019-11-28 18:52:25
一.认识java反射机制   在java语言中,之所以会有如此众多的开源技术支撑,很大的一部分来源于java最大特征--反射机制.能够灵活的去使用反射机制进行项目的开发与设计,才能够真正接触到java的精髓.所有的技术实现的目标只有一点:重用性. --对于反射技术,首先应该考虑"反"与"正"的概念,所谓的"正"操作指的是当你要使用一个类的时候,要先导入程序所在的包,而后根据类进行对象的实例化,并且依靠对象调用类中的方法.但是"反"则为,根据实例化对象,反推出其类型. --范例:正向操作 1 package 反射.认识反射机制; 2 3 import java.util.Date; //1.当如程序所在的包,知道对象的出处 4 5 /** 6 * @author : S K Y 7 * @version :0.0.1 8 */ 9 public class Demo { 10 public static void main(String[] args) { 11 Date date = new Date(); //2.通过类产生实例化对象 12 System.out.println(date.getTime()); //3.根据对象调用类中的方法 13 } 14 } --如果想要实现"反"的操作,那么首先要采用的就是Object类中所提供的操作方法:public final

浅谈Java的反射机制

喜夏-厌秋 提交于 2019-11-28 13:54:58
Java的反射机制特别适合大型项目尤其是多功能项目的开发。因为它极大的减少了编译时静态加载类的时间并且减少了初期内存的消耗。 为什么要有反射机制 1. 在涉及某些应用程序时,我们往往需要动态升级以增加修改功能,而在静态编译体系中一切升级操作都需要对源代码进行更改,这就意味着每升一次级就要对整个源代码编译一次。小程序编译还好说,但如果是大型程序的话,编译一次要几个小时甚至几天才能完成,那这样显然纯静态的编程方式不太适合。而Java也是一门静态语言,为了弥补这个缺点,就有了反射机制。 2. Java更多的情况是应用于服务端程序,而服务器上的程序有个很重要的特点就是不能关掉;即使关掉,也要提前给用户通知。那么,如果此时要对系统进行升级,既要保证体系内其他功能正常运行,还要保证升级措施,此时就可以用反射来实现。 3. 使程序更加清晰,将主程序和功能程序分离开,便于后期管理。 反射机制的应用 • 杀毒软件病毒库的在线升级 • JDBC数据桥的构建(Class.forName(“数据库驱动包类名称”)) • 应用程序功能的增加 • 分析泛型的实质 • 分析程序,找bug 反射机制有三种实现方式 • 得到类类型,同时加载类Class class = Class.forName(“SomethingName”) • 已知类对象,由对象得到其所属类Class class = new Demo()