java的反射库(reflection library)提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。
这项功能大量运用JavaBeans中。
反射主要用来在运行中分析类的能力,在运行时查看对象,实现通用的数组操作代码、
Class类
Class类为每一个类型(包括int double等基本类型甚至void)提供了一个Class对象,也就是说相同类型的对象分别调用getClass()时但会Class对象是一致的(地址相同),
class EmployeeTest
{
public static void main(String[] args)
{
Employee e=new Employee();
Class cl1=e.getClass();
Class cl2=Employee.class;
System.out.println(cl1==cl2) //true
}
}
三种获得Class对象的方式(Class类里没有显示 的构造方法使得可以通过new关键字构建一个对象)
1.Object类里的getClass()方法
e.getClass()//返回一个Class对象
2.类名.Class
int.Class double.Class String.Class
3.Class类里的static forName(String quanleiming )
Class.forName(com.java.Employee);//必须是全类名,这个方法还会抛出一个检查异常,使用时要加try-catch
newInstance()方法:
Class cl1=Class.forName(con.java.Employee);
cl1.newInstance();//Class类的newInstance()调用的无参构造方法,如果Employee类里没有无参构造方法将报出一个异常
如果想调用有参的构造方法只能使用Constructor类的newInstance()
Class cl1=Class.forName("com.java.Employee");
Constructior cons=cl1.getConstructior(String.class,double.class);
Employee e=(Employee)cons.newInstance("ccc",1234);
%%无论是Class还是Constructior类的newInstance()返回值都是Object类型