怎么理解java中反射机制?或者说反射的作用和原理?简要阐述一下。
简单的来说,反射机制其实就是指程序在运行的时候能够获取自身的信息。如果知道一个类的名称或者它的一个实例对象, 就能把这个类的所有方法和变量的信息(方法名,变量名,方法,修饰符,类型,方法参数等等所有信息)找出来。如果明确知道这个类里的某个方法名+参数个数 类型,还能通过传递参数来运行那个类里的那个方法,这就是反射。
在Java中,Class类与java.lang.reflect类库一起对反射的概念提供了支持,该类库包含了Field、Method以及Constructor类(每个类都实现了Member接口)。我们知道对RTTI(运行时类型识别)来说,编译器在编译时打开和检查.class文件。而对于反射机制来说,.class文件在编译时是不可获取的,所以是在运行时打开和检查.class文件的。
用白话的方式来说:首先知道一点:jvm怎么运行 java程序的?
作个比喻,jvm 就像一个 工厂, .class就是个产品品,被运到了工厂中,工厂里有一本账本,把进来的每一个物品的编号,名字等等都记下来了。
对象比喻成要准备加工的产品;
那么**反射**是什么呢? 反射比喻一个动作,就是你可以根据加工的产品去找账本相对应的记录,找到记录后,就可以得到此产品的任何信息,如果你想再造一个产品,把数据交个
另一个专门产产品的机器(这个机器是虚拟机里的某一种机制),它会自动产生一个产品(这是对象)。
还有一个问题?谁去运产品,谁去记录产品,谁去执行加工的流程?这些问题是jvm里的某些工具等等去做
简单的来说,反射机制其实就是指程序在运行的时候能够获取自身的信息。如果知道一个类的名称或者它的一个实例对象, 就能把这个类的所有方法和变量的信息(方法名,变量名,方法,修饰符,类型,方法参数等等所有信息)找出来。如果明确知道这个类里的某个方法名+参数个数 类型,还能通过传递参数来运行那个类里的那个方法,这就是反射。
在Java中,Class类与java.lang.reflect类库一起对反射的概念提供了支持,该类库包含了Field、Method以及Constructor类(每个类都实现了Member接口)。我们知道对RTTI(运行时类型识别)来说,编译器在编译时打开和检查.class文件。而对于反射机制来说,.class文件在编译时是不可获取的,所以是在运行时打开和检查.class文件的。