java中反射是在运行中动态的加载进入。有个很大的好处就是能够节省不少资源。为何这么说呢,首先咱们来讲一下jvm,jvm是java的虚拟机,java之因此支持跨平台就是由于java虚拟机的存在。程序你有以下语句 Object o=new Object();运行起来的时候,java的虚拟机会首先启动。将你的java文件编译成 .class文件。加载进入你jvm的内存之中。你的类Object会加载进入方法区,这时候会生成个类的类型对象(即class类的对象)加载到堆中,做为方法区类的数据结构的接口。jvm建立对象时会看你的类是否加载好,加载好了便生成你的类的对象。然而在大型工程项目中,有不少可能暂时用不到,因此咱们不必把每个类都生成对象。而反射机制正是解决这了这个问题。java
举个例子咱们的项目底层有时是用mysql,有时用oracle,须要动态地根据实际状况加载驱动类,这个时候反射就有用了,假设 com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection这两个类咱们要用,这时候咱们的程序就写得比较动态化,经过Class tc =Class.forName("com.java.dbtest.TestConnection");经过类的全类名让jvm在服务器中找到并加载这个类,而若是是oracle则传入的参数就变成另外一个了。这时候就能够看到反射的好处了,这个动态性就体现出java的特性了!举多个例子,你们若是接触过spring,会发现当你配置各类各样的bean时,是以配置文件的形式配置的,你须要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运行。mysql
反射经过对象获取到类,Employee employee=new Employee(); employee.getClass();getClass是Object类中的方法。spring
注意Class文件就是反射机制的源头。只要找到你用的类的Class类型对象。就能找到你类的方法。就能够调用这个类的方法。sql
获取Class类的对象的方法有以下三种。服务器
以下图数据结构
借鉴以下大佬的文章。
做者:老顽童周伯通
连接:https://www.zhihu.com/question/24304289/answer/147529485
来源:知乎
oracle