浅谈java反射机制

一、java反射机制的概念
二、运行机制
三、反射机制的作用

四、特点

我们从以上四个方面了解!

一、java反射机制的概念

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

二、运行机制

Java程序在运行时,JRE(Java Runtime Environment)一直对所有的对象进行着运行时类型标识。

这项信息记录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。也就是说,ClassLoader找到了需要调用的类时(java为了调控内存的调用消耗,类的加载都在需要时再进行),就会加载它,然后根据.class文件内记载的类信息来产生一个与该类相联系的独一无二的Class对象。该Class对象记载了该类的字段,方法等等信息。以后jvm要产生该类的实例,就是根据内存中存在的该Class类所记载的信息(Class对象应该和我所了解的其他类一样会在堆内存内产生、消亡)来进行。而java中的Class类对象是可以获取到的(虽然你无法像其他类一样运用构造器来得到它的实例,因为Class对象都是jvm产生的)基于这个基础,java实现了反射机制。

  Eg:

在写j2ee的model层的时候,有一些代码是每次都得写的,比如对于每个对象的CURD操作,list,分页等等,每个对象都得写这样的重复代码。
我写了一个接口BaseDaoInterface,和一个抽象类,BaseDaoImpl,在这里面定义好增删改查,当然每个的参数都是Object,然后比如UserDaoInterface继承BaseDaoInterface,

UserDaoImpl继承BaseDaoImpl,这样在进行这些每个对象都需要的方法的时候直接调用super.add(vo.getClass().getName,vo)就行了,会自动添加到对应的表中去,这里面在写BaseDaoImpl的时候就全部用的反射,写这个工具类的时候不知道以后传进来的对象或者类是什么,都是Object的,只有当运行的时候才能知道是什么类型,这就是动态调用。

反射机制获取类有三种方法:

1.直接通过类名.Class的方式得到。  
   
   Class cla = Person.class;  
   
           System.out.println("通过类名: " + cla); 
2.通过对象的getClass()方法获取,这个使用的少(一般是传的是Object,不知道是什么类型的时候才用)。
 
   Object obj = new Person();  
   
           cla = obj.getClass();  
   
           ystem.out.println("通过getClass(): " + cla);
3.通过全类名获取,用的比较多,但可能抛出ClassNotFoundException异常。
   
  Class cla = Class.forName("com.java.reflection.Person");  
   
          System.out.println("通过全类名获取: " + cla); 

三、反射机制的作用

1.反编译:.class  -->  .java

2.通过反射机制访问java对象的属性,方法,构造方法等;

四、特点

1.所有的属性和方法都是动态获取的。

2. 通过反射读取里边的内容。这样代码是固定的,但是配置文件的 内容我们可以改,这样使我们的代码灵活了很多!

优点:能够使我们的代码更加灵活,更加容易实现面向对象

缺点:会降低程序的性能,而且复杂度更高。(反射是需要解析字 节码,将内存中的对象进行解析)

猜你喜欢

转载自blog.csdn.net/hzj1369/article/details/78495066