黑马程序员技术交流社区

标题: 在看反射的时候测试的问题,求大神指点。 [打印本页]

作者: 殷挥笔    时间: 2013-12-1 03:36
标题: 在看反射的时候测试的问题,求大神指点。

  1. <P>import java.lang.reflect.Method;</P>
  2. <P>public class Test11 {</P>
  3. <P> /**
  4.   * @param args
  5.   */
  6. public static void main(String[] args) {
  7.   // TODO Auto-generated method stub
  8.   System.out.println(String.class);
  9.   System.out.println(String.class.getModifiers());
  10.   Method[] M = new Method[String.class.getMethods().length];
  11.   for (int i = 0; i < M.length; i++) {
  12.    System.out.println(M[i]+""+i);
  13.   }
  14. }</P>
  15. <P>}</P>
复制代码

for循环中的打印结果都是null,不是说返回方法吗?为什么是null呢?

另外,求大神详细解释下反射的含义,详细,不是“反射就是把java类中的各种成分映射成相应的Java类”,最好能举例说明,谢谢!!{:soso_e105:}{:soso_e105:}

作者: doitforyou    时间: 2013-12-1 09:07
Method[] m = String.class.getMethods();
for(Method method : m){
           System.out.println(method.getName());
}
以上代码才会得到String类中各方法的名称。在你的代码中是创建了一个等同于String类方法个数的Method数组,而没有对他进行初始化,所以它的引用值都为null.
至于那句经典:反射就是把java类的各个成分映射成为相应的java类,举个例子,比如java类中有成员变量、成员方法、构造方法等等,就把这些成员的共性抽取定义成无差别的Constructor、Method、Field类等等,然后可以通过反射的方式调用,如同上面的Method调用。

拙见仅供参考,我也坐等大神回答呢。。。
作者: lijiang    时间: 2013-12-1 09:35

  1. import java.lang.reflect.Method;
  2. public class Test11 {
  3. /**
  4.   * @param args
  5.   */
  6. public static void main(String[] args) {
  7.   // TODO Auto-generated method stub
  8.   System.out.println(String.class);
  9.   System.out.println(String.class.getModifiers());
  10.   Method[] M =String.class.getMethods();//把这个类中的方法放在数组中
  11.   System.out.println(M.length);//获取数组长度
  12.   for (int i = 0; i < M.length; i++) {
  13.    System.out.println(M[i]+"..."+i);
  14.   }
  15. }
  16. }
复制代码





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