反射:能够分析类能力的程序被称为反射(reflective)
可以利用反射机制:
.在运行中分析类的能力
.在运行中查看对象
.实现数组的操作代码
.利用Method对象
Class类:
在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的类型标识.
这个信息保存着每个对象所属的类踪迹.虚拟机利用运行时信息选择相应的方法执行
然而,可以通过专门的Java类访问这些信息,保存这些信息的类被称作Class
//
Employee e;
...
Class cl=e.getClass();
如果类在一个包中,包的名字也作为类名的一部分
import java.util.Date;
Date d=new Date();
Class cl=d.getClass();
String name=cl.getName();//name is set to "java.util.Date"
还可以调用静态方法forName或得类名对应的Class对象
String ClassName="java.util.Date";
Class cl=Class.forName(ClassName);
//这个方法只有在ClassName是类名或者接口名时才能够执行,
否则会抛出一个checked exception(已检查异常)
//异常两种形式:
未检查异常,检查异常,对于已检查异常,编译器将会检查是否提供了处理器。
获得Class类对象的第三中方法,如果T是Java类型,T.class将代表匹配的类对象
Class cl=Date.class;//if you import java.util.Date;
Class c2=int.class;
Class c3=Double.class;
通常将forName和newInstance配合起来使用,可以根据存储在一个字符串中的类名创建一个对象
String s="java.util.Date";
Object o=Class.forName(s).newInstance();
//newInstance可以迅速创建一个类的实例
可以利用反射机制:
.在运行中分析类的能力
.在运行中查看对象
.实现数组的操作代码
.利用Method对象
Class类:
在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的类型标识.
这个信息保存着每个对象所属的类踪迹.虚拟机利用运行时信息选择相应的方法执行
然而,可以通过专门的Java类访问这些信息,保存这些信息的类被称作Class
//
Employee e;
...
Class cl=e.getClass();
如果类在一个包中,包的名字也作为类名的一部分
import java.util.Date;
Date d=new Date();
Class cl=d.getClass();
String name=cl.getName();//name is set to "java.util.Date"
还可以调用静态方法forName或得类名对应的Class对象
String ClassName="java.util.Date";
Class cl=Class.forName(ClassName);
//这个方法只有在ClassName是类名或者接口名时才能够执行,
否则会抛出一个checked exception(已检查异常)
//异常两种形式:
未检查异常,检查异常,对于已检查异常,编译器将会检查是否提供了处理器。
获得Class类对象的第三中方法,如果T是Java类型,T.class将代表匹配的类对象
Class cl=Date.class;//if you import java.util.Date;
Class c2=int.class;
Class c3=Double.class;
通常将forName和newInstance配合起来使用,可以根据存储在一个字符串中的类名创建一个对象
String s="java.util.Date";
Object o=Class.forName(s).newInstance();
//newInstance可以迅速创建一个类的实例