Java反射
1、什么是反射?
反射机制是构建框架技术的基础所在,大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的已经被加载了。
Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射。
2、反射的作用
假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。
Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力,我们称为Java类的“自审”。大家都用过Jcreator和eclipse。当我们构建出一个对象的时候,去调用该对象的方法和属性的时候。一按点,编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来,供用户进行选择。这就是利用了Java反射的原理,是对我们创建对象的探知、自审。
3、关于反射所使用的类
要正确使用Java反射机制就得使用java.lang.Class这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。
4、代码示例
本类用来测试反射机制,可以返回方法集合和属性集合。
import java.lang.reflect.Method;
import com.mysql.jdbc.Field;
public class Reflection {
public static void main(String args[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class cs=Class.forName("Student"); //加载类
Method[] mt=cs.getDeclaredMethods(); //利用得到的Class对象自身,返回方法对象集合
for(Method me:mt){ //遍历该类的方法集合
System.out.println(me.toString());
}
System.out.println("***************");
java.lang.reflect.Field[]fe=cs.getDeclaredFields(); //返回属性对象集合
for(java.lang.reflect.Field f:fe){ //遍历该类的属性集合
System.out.println(f.toString());
}
}
}
class Student{
private String name;
private Float score;
public Student(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Float getScore() {
return score;
}
public void setScore(Float score) {
this.score = score;
}
public Student(String name, Float score) {
this.name = name;
this.score = score;
}
public String toString(){
return name+"\t"+score+"\t";
}
}