2016-08-28 3 views
0

Консоль показывает ArrayIndexOutOfBoundsException при запуске этой программы, она не может найти аргумент в main(). Я действительно не знаю причину, потому что у меня есть аргумент String[] args в public 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"); 
     } 
    } 
} 
+2

При запуске кода после компиляции, Вы должны пройти аргумент, который называется [аргумент командной строки] (https://docs.oracle .com/JavaSE/учебник/Эфирные/окружающая среда/cmdLineArgs.html). Предположим, вы хотите передать String '' 'Checking''' в свой код, тогда вы должны запустить файл как' '' java ClassViewer Checking'''. –

+0

Пропустил ли вы _pass_ аргумент для программы? – tkausl

+0

Убедитесь, что вы передаете аргументы 'view'. Для тестирования вы можете изменить 'ClassViewer.view (args [0]);' передать аргумент типа ClassViewer.view (className); 'где className - это имя класса. – c0der

ответ

0

Как было отмечено в комментариях соответствующим образом, вы должны предоставить аргументы командной строки.

Вот пример того, что на терминале 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 имеет свой собственный путь):

Смежные вопросы