2016-08-28 15 views
0

このプログラムを実行するとコンソールにArrayIndexOutOfBoundsExceptionが表示され、main()に引数が見つかりませんでした。私はpublic static void main(String[] args)で引数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/tutorial/essential/environment/cmdLineArgs.html)。あなたのコードに文字列 '' 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が独自の方法を持っていることに、注意してください)のIDEで行うことができます。

あなたはそれをコンパイルした後、コードを実行している場合は
関連する問題