A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 长石 中级黑马   /  2014-2-11 11:10  /  1197 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看张老师的视频  说了一个问题:用反射调用main方法

     怎样调用我是看明白了   

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

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

2 个回复

倒序浏览
假如你拿着一个Class,如果没有反射,你知道怎么调用它吗.? 我写好了个功能,我就不给你源代码,只给你class,你说怎么办?现在明白反射的作用了吗.?
回复 使用道具 举报
  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. }
复制代码

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

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马