黑马程序员技术交流社区

标题: main函数的反射问题,看我哪里错了,好纠结 [打印本页]

作者: gudao20080    时间: 2013-8-14 23:20
标题: main函数的反射问题,看我哪里错了,好纠结
看张老师的JAVA基础增强,说到main函数的反射,如下:
     将一个类名com.itheima.MyPacket.ArgumentTest 以字符串的形式传递给类ReflectMethod中的main参数。
按老师说的,我在myEclipse中---Run  As-----Run configuration---Arguments----program argument中设置参数
com.itheima.MyPacket.ArgumentTest 。然后运行,为什么一直异常
  1. package com.itheima.MyPacket;
  2. import java.lang.reflect.InvocationTargetException;
  3. import java.lang.reflect.Method;


  4. public class ReflectMethod {

  5.         public static void main(String[] args) throws Exception {
  6.                 // TODO Auto-generated method stub
  7.                
  8.                 String startClassName = args[0];//将输入的第一个字符串做为类名
  9.                 //取得传入的字符串类名的main方法
  10.                 Method mainMethod = Class.forName(startClassName).getMethod("main", String[].class);
  11.                
  12.                 mainMethod.invoke(null, (Object)new String[]{"111","222","333"}); //调用main方法
  13.         }
  14. }
  15. class ArgumentTest{
  16.         public void main(String[] args){
  17.                 for(String str: args)                                //显示args的值
  18.                         System.out.println(str);
  19.         }
  20. }
复制代码
运行结果:
  1. Exception in thread "main" java.lang.NullPointerException
  2.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  3.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  4.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  5.         at java.lang.reflect.Method.invoke(Method.java:601)
  6.         at com.itheima.MyPacket.ReflectMethod.main(ReflectMethod.java:15)
复制代码

作者: binghaiwang    时间: 2013-8-15 14:39
  1. class ArgumentTest{
  2.         public void main(String[] args){
  3.                 for(String str: args)                                //显示args的值
  4.                         System.out.println(str);
  5.         }
  6. }
复制代码
你这个类的main 不是静态的 你改成静态的就可以了
作者: 清心玉质    时间: 2013-8-15 17:01
ArgumentTest的main方法缺少静态修饰:
class ArgumentTest{
                public static void main(String[] args){
                        for(String str: args)                                //显示args的值
                                System.out.println(str);
                }
        }

作者: 王永贺    时间: 2013-8-15 19:16
因为你调用的类中的main方法的格式不对 应该是public static void main。。。  你缺了static




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