黑马程序员技术交流社区

标题: 用反射调用main方法有什么意义? [打印本页]

作者: 长石    时间: 2014-2-11 11:10
标题: 用反射调用main方法有什么意义?
今天看张老师的视频  说了一个问题:用反射调用main方法

     怎样调用我是看明白了   

      但是为什么要用反射调用不是很明白   意义在哪?
      和普通调用的差别在哪?

作者: 何苦似梦离    时间: 2014-2-11 11:18
假如你拿着一个Class,如果没有反射,你知道怎么调用它吗.? 我写好了个功能,我就不给你源代码,只给你class,你说怎么办?现在明白反射的作用了吗.?
作者: itpower    时间: 2014-2-11 11:26
  1. import java.lang.reflect.Field;  
  2. import java.lang.reflect.Method;  
  3. import javax.swing.JOptionPane;  
  4. /**
  5.   *本类用于测试反射API,利用用户输入类的全路径,
  6. *找到该类所有的成员方法和成员属性
  7.   */  
  8. public class MyTest {  
  9.      /**
  10.      *构造方法
  11.      */  
  12.     public MyTest(){  
  13.        String classInfo=JOptionPane.showInputDialog(null,"输入类全路径");//要求用户输入类的全路径  
  14.        try {  
  15.            Class cla=Class.forName(classInfo);//根据类的全路径进行类加载,返回该类的Class对象  
  16.             
  17.            Method[] method=cla.getDeclaredMethods();//利用得到的Class对象的自审,返回方法对象集合  
  18.             
  19.            for(Method me:method){//遍历该类方法的集合  
  20.               System.out.println(me.toString());//打印方法信息  
  21.            }  
  22.             
  23.            System.out.println("********");  
  24.             
  25.            Field[] field=cla.getDeclaredFields();//利用得到的Class对象的自审,返回属性对象集合  
  26.            for(Field me:field){ //遍历该类属性的集合  
  27.               System.out.println(me.toString());//打印属性信息  
  28.            }  
  29.        } catch (ClassNotFoundException e) {  
  30.            e.printStackTrace();  
  31.        }  
  32.     }  
  33.     public static void main(String[] args) {  
  34.        new MyTest();  
  35.     }  
  36. }
复制代码

类的全路径是在程序运行的时候,由用户输入的。所以虚拟机事先并不知道所要加载类的信息,这就是利用反射机制来对用户输入的类全路径来对类自身的一个自审。从而探知该类所拥有的方法和属性。
通过上面代码,大家可以知道编译工具为什么能够一按点就能列出用户当前对象的属性和方法了。它是先获得用户输入对象的字符串,然后利用反射原理来对这样的类进行自审,从而列出该类的方法和属性。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2