2011-11-30 97 views
3

我的目標是讀入命令行我希望觀察信息的類的名稱。當我在運行時知道類名時,我沒有問題。我似乎無法管理的是如何基於字符串輸入創建類對象。Java反射,類對象

public class Tester { 

    static void methodInfo2(Object obj) throws ClassNotFoundException { 
     //some stuff   
     System.out.print("Test!"); 

    } 

    public static void main (String args[]) throws ClassNotFoundException{ 
     String className = args[0]; 
     System.out.println("Class: "+className); 

     //myclass2 mc = new myclass2(); 
     //Class c = mc.getClass(); 
     Class argClass = Class.forName(className); 

     try { 
      methodInfo2(argClass); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 


    } 

} 

2在主要方法中註釋掉的行顯示了我在過去編譯之前知道類名時所做的事情。以下未註釋的行顯示我認爲應該工作,但我收到一個ClassNotFoundException。這個班當然存在,所以我不知道我有什麼問題。

回答

7

兩個建議:

  1. 確保你給它的完全限定域名(例如"java.lang.Thread"而不僅僅是"Thread")。
  2. 確保已編譯的類文件實際位於類路徑中。
+0

感謝您的快速回復!對於後來發現這個主題的人來說,我的問題是我想要的類,我在elcipse的一個包中定義了自己。修正是將軟件包名稱追加到類名的開頭:「packageName.myclass2」 – Nibirue

2

Class.forName是在運行時按名稱加載類的正確方法。

您的參數錯誤或者您的類不在類路徑中。