在学习Java的JDBC之前,Java的反射机制我们是必须要了解的。因为在JDBC中,我们并不知道我们需要加载驱动的名称,所以需要用Class反射出来。
反射机制是虚拟机在运行之时,动态的加入所需要运行的类,但是却是有缺陷的机制,它存在不安全,消耗内存资源等缺点。
并且涉及到反射的类,都没有构造方法,所以,java.lang.reflect包中所有得累都没有构造方法,为了更好的理解,这里我们使用两个类做演示,我们使用Reflection类反射出类stu的所有信息,如下代码:
stu.java代码:
[CODE=java]
public class stu {
int age;
String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
[/CODE]
Reflection.java代码:
[CODE=java]
public class Reflection {
public static void main(String args[]) {
stu st = new stu();
Class c = st.getClass();
System.out.println("===Class类的演示===");
System.out.println("********stu类的类名********");
System.out.println(c.getName()); // 反射出stu类的类名
System.out.println("********stu类的超级父类********");
System.out.println(c.getSuperclass()); // 反射出stu类的超级父类
System.out.println("********stu类是否为接口********");
System.out.println(c.isInterface()); // 反射出stu类的超级父类
System.out.println("===Method类的演示(得到stu类中的方法,参数,和返回)===");
java.lang.reflect.Method[] met = c.getDeclaredMethods();
for (int i = 0; i < met.length; i++) {
System.out.print(met[i].getReturnType() + " "); // 反射出方法的返回类型
System.out.print(met[i].getName() + "("); // 反射出方法名
/* 由于方法中可能存在多个参数,所以需要Class参数 */
Class[] para = met[i].getParameterTypes();
for (int j = 0; j < para.length; j++) {
System.out.print(para[j].getName());
}
System.out.println(")");
}
}
}
[/CODE]