找不到主方法的参数



当我运行这个程序时,控制台显示一个ArrayIndexOutOfBoundsException,它无法在main()中找到参数。我真的不知道原因,因为我确实有String[] argspublic static void main(String[] args)的论点:

package reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.time.chrono.JapaneseChronology;
public class ClassViewer {
    public static void view(String clazName) throws ClassNotFoundException{
        Class clz=Class.forName(clazName);
        Package p=clz.getPackage();
        System.out.printf("package %s;%n", clz.getName());
        int modifier=clz.getModifiers();//取得类型的修饰常数
        System.out.printf("%s %s %s {%n", 
                Modifier.toString(modifier),
                Modifier.isInterface(modifier) ? "interface" :"class",
                clz.getName()
                );
        //取得声明的数据成员代表对象
        Field[] fields =clz.getDeclaredFields();
        for(Field field:fields){
            //显示权限修饰
            System.out.printf("t%s %s %s;%n", 
                    Modifier.toString(field.getModifiers()),
                    field.getType().getName(),
                    field.getName()
                    );
        }
        //取得声明的创建方法代表对象
        Constructor[] constructors=clz.getDeclaredConstructors();
        for(Constructor constructor:constructors){
            System.out.printf("t%s %s();%n", 
                    Modifier.toString(constructor.getModifiers()),
                    constructor.getName()
                    );
        }
        //取得声明的方法成员代表对象
        Method[] methods=clz.getDeclaredMethods();
        for(Method method:methods){
            System.out.printf("t%s %s %s;%n", 
                    Modifier.toString(method.getModifiers()),
                    method.getReturnType(),
                    method.getName()
                    );
        }
        System.out.println("}");
    }
public static void main(String[] args) {
        try {
            ClassViewer.view(args[0]);
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("Array Index Out Of Bounds Exception ");
        }
        catch (ClassNotFoundException e) {
            System.out.println("can not find the class");
        }
    }
}

正如在注释中适当指出的那样,必须提供命令行参数。

下面是Linux终端上的示例(Mac也有终端,Windows用户有powershell或CMD)

$ ls
ClassViewer.java
$ javac ClassViewer.java
$ java ClassViewer ClassViewer
package ClassViewer;
public class ClassViewer {
    public ClassViewer();
    public static void view;
    public static void main;
}

注意,显然类必须在同一目录

$ java ClassViewer /home/xieerqi/bin/java2/soundexClass                        
can not find the class
$ # This didn't work, so copy the soudnexClass.class into current directory
$ cp /home/xieerqi/bin/java2/soundexClass.class  .
$ java ClassViewer soundexClass                                                
package soundexClass;
public class soundexClass {
    public soundexClass();
    public static void getSoundex;
    public static void main;
}

这也可以在IDE中完成(注意,每个IDE都有自己的方法):

  • Netbeans
  • Eclipse
  • jGRASP

相关内容

  • 没有找到相关文章

最新更新