反射库( reflection library) 提供了一个非常丰富且精心设计的工具集, 以便编写能够动态操纵 Java 代码的程序。这项功能被大量地应用于 JavaBeans 中, 它是 Java组件的体系结构。使用反射,Java 可以支持 Visual Basic用户习惯使用的工具。特别是在设计或运行中添加新类时, 能够快速地应用开发工具动态地查询新添加类的能力。
能够分析类能力的程序称为反射(reflective )。反射机制的功能极其强大,在下面可以看到, 反射机制可以用来:
- 在运行时分析类的能力。
- 在运行时查看对象,例如, 编写一个 toString 方法供所有类使用。
- 实现通用的数组操作代码。
- 利用 Method 对象, 这个对象很像中的函数指针
我们现在只用其中的两个用途,一个是用getclass获得类型,一个是用forName下的方法创建类的实例。
public static void main(String[] args) throws Exception{
Car car = new Car();
Class cl1 = car.getClass();
Class cl2 = Class.forName(cl1.getName());
System.out.println(cl1.getName()); //Car
System.out.println(cl2.getName()); //Car
}
下面是用newInstance创建了一个实例对象。
public static void main(String[] args) throws Exception{
//要注意forName里面写类的全名,也就是必须加包名,因为我这里没有包,所以不加
Car cl = (Car) Class.forName("Car").newInstance();
System.out.println(cl.getName());
}