2017-04-18 1682 views
1

我正在學習java反射。我正在使用下面的代碼。但是當我運行時,它會給出錯誤在java反射中找不到類

未報告的異常ClassNotFoundException;必須被捕獲或宣佈拋出 Class className = Class.forName(「First」);

也許我錯了某個地方。請幫助我。下面的代碼:

import java.lang.reflect.Method; 
public class First{ 
     public void print(){} 
     public void ready(){} 
    } 

public class test{ 
    public static void main(String args[]) 
    { 
     Class className=Class.forName("com.Test.First"); 
     Method[] methods=className.getMethods(); 
     System.out.println("First method is" + methods[0]); 
    } 
} 
+2

它的意思正是它所說的。你必須在''main'方法中添加'拋出ClassNotFoundException',或者你需要將產生該編譯錯誤的語句放在'try'塊中,後面跟着'catch(ClassNotFoundException e)'。感謝VGR的 – VGR

+0

。得到它了。 – mamecu

回答

1

所有它的說法是,拋出的Class.forName這個(非運行時)例外,所以你必須以某種方式處理它。這裏有兩種方法可以做到這

public class test{ 
    public static void main(String args[]) throws ClassNotFoundException 
    { 
     Class className=Class.forName("com.Test.First"); 
     Method[] methods=className.getMethods(); 
     System.out.println("First method is" + methods[0]); 
    } 
} 

或者

public class test{ 
    public static void main(String args[]) 
    { 
     try { 
      Class className=Class.forName("com.Test.First"); 
      Method[] methods=className.getMethods(); 
      System.out.println("First method is" + methods[0]); 
     } 
     catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
     } 
    } 
} 
+0

謝謝ControlAltDel。得到它了。 – mamecu

0

此行是問題

Class className=Class.forName("com.Test.First"); 
Class.forName("com.Test.First")

,你可以用任何的胡言亂語和編譯器不該更換com.Test.First不在乎爲你驗證它。所有編譯器知道,有可能沒有類com.Test.First,因此您有責任處理ClassNotFoundException

+0

謝謝Saideep Sambaraju。 – mamecu