Java中的反射(1)

来源:互联网 发布:科荣纺织软件 编辑:程序博客网 时间:2024/06/07 03:54

首先介绍反射机制的功能:

  • 在运行中分析代码
  • 在运行中查看对象
  • 实现通用的数组操作代码
  • 利用Method对象,这个对象很像C++中的函数指针

Class类:

学习反射即不得不接触一个新的类(Class类),在java运行时系统会为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。

对于每个类而言,JRE都为其保留了一个不变的Class类对象 ,yige Class对象包含了特定的某个类的有关信息。

下面通过例子说明:

class Employee{    private  int age;    // private  String name;    public int getage(){       return this.age;    }   public void setage(int age){      this.age=age;   }}

1。 第一种获取Class类实例的方法。对于Object类中的getClass()方发将会返回一个Class类型的实例

Employee e;Class cl=e.getClass();cl便是一个用来保存Employee类有关信息的Class类。一个Class对象表示一个特定类的属性(cl表示Employee类的特定属性)

如果存在一个类继承于Employee

class Manager extends{}Employee e1=new Employee();Employee e2=new Manager();Class cl1=e1.getClass();Class cl2=e2.getClass();

就上 面的代码来介绍一个新的方法 Class类的getName()方法:

System.out.println(e1.getClass.getName());//EmployeeSystem.out.println(e2.getClass.getName());// ManagerData data=new Data();Class cl=data.getClass();String classname=cl.getName();"java.uitl.Data"说明getName()的作用是输出一个对象所属的类的真实类名

2。 接着介绍另两种获取Class类实例的方法:

  • 一:
String classname="java.uitl.Data";Clsaa cl=Class,forName(classname)

上面代码便是通过真实存在类名或者接口名获取一个Class实例,前提是这个classname必须真实存在,否则会抛出一个checkedexception异常

  • 二:如果T是任意的Java类型。T.class将代表匹配的类对象。例如:
Class cl1=Data.class;Class cl2=int.class;

方法newInstance(),作用:根据一个类对象快速创建一个与这个对象具有相同类类型的实例。需要注意的是:通过newInstance()实例化一个对象时,调用的是这个类的无参构造函数。如果没有无参构造函数就会抛出异常

 Employee e1=new Employee(); Employee e2= e.getClass().newInstance(); e1.getClass()==e2.getClass();//true 结合forName()和newInstance()使用 String s="java.uitl.Data"; Object m=Class.forName(s).newInstance(); Data data=(Data)m;
0 0
原创粉丝点击