在“租车系统”中,编写过一个驾驶员(租车者)Driver类,这个类有一个callShow(Vehicle v)方法,输入参数类型为Vehicle,通过这个方法显示指定车辆的信息。改造一下之前的代码,将Driver类作为程序入口类,具体代码如下:

      很显然,程序员在编码时就已经确定Driver类的callShow(Vehicle v)方法,输入参数类型为Vehicle,在该方法内部,调用Vehicle类的show()方法,显示车辆信息。但是,如果在编译的时候并不知道传入参数的类型是什么,这时候就需要使用反射机制。

    1. import java.lang.reflect.*;
    2. import com.bd.zuche.*;
    3. class TestRef
    4. {
    5. public static void main(String[] args)
    6. {
    7. Scanner input = new Scanner(System.in);
    8. String cName = input.next();
    9. showMethods(cName);
    10. }
    11. public static void showMethods(String name)
    12. {
    13. try{
    14. Class c = Class.forName(name);
    15. Method m[] = c.getDeclaredMethods();
    16. for (int i = 0; i < m.length; i++)
    17. {
    18. System.out.println(m[i].toString());
    19. }
    20. }catch (Exception e){
    21. e.printStackTrace();
    22. }
    23. }

      编译、运行程序,在运行时分别输入java.lang.Object和com.bd.zuche.Car,运行结果如图5.1和图5.2所示,图中列出了Object类和Car类的所有方法。


    5.1 Java反射机制 - 图2


    图5.2 Car类的所有方法

      作为程序员,编写简单的Java程序时,使用反射机制的机会不多。反射机制一般在框架中使用较多,因为框架要适用更多的情况,对灵活性要求较高,而反射机制正好能解决这种灵活性要求。