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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看张老师的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)
复制代码

3 个回复

正序浏览
因为你调用的类中的main方法的格式不对 应该是public static void main。。。  你缺了static
回复 使用道具 举报
ArgumentTest的main方法缺少静态修饰:
class ArgumentTest{
                public static void main(String[] args){
                        for(String str: args)                                //显示args的值
                                System.out.println(str);
                }
        }
回复 使用道具 举报
  1. class ArgumentTest{
  2.         public void main(String[] args){
  3.                 for(String str: args)                                //显示args的值
  4.                         System.out.println(str);
  5.         }
  6. }
复制代码
你这个类的main 不是静态的 你改成静态的就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马