2017-06-01 69 views
0
class j { 
public static void main(String args[]) 
    { 
     Object obj=new Object(); 
     String c ="Object"; 
     System.out.println(Class.forName(c).isInstance(obj)); 
    } 
} 

在上面的代碼中,我試圖找到obj是否是Object的一個實例。我應該得到答案爲true,但是我得到一個錯誤。我無法計算出爲什麼錯誤正在發生。可以請任何人幫助我嗎?isInstance中的ClassNotFoundException

error: unreported exception ClassNotFoundException; must be caught or 
declared to be thrown 
    System.out.println(Class.forName(c).isInstance(obj)); 
+2

'Class.forName'拋出異常,你需要處理它 - 通過在看看[例外線索(https://docs.oracle啓動.com/javase/tutorial/essential/exceptions /) – MadProgrammer

+0

我投票結束這個問題作爲題外話,因爲它會更好地回答使用許多可用的教程之一,如[異常跟蹤](https:// docs (https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html)和[JavaDocs] (https://docs.oracle.com/javas e/8/docs/api/java/lang/Class.html#forName-java.lang.String-) – MadProgrammer

+0

是的,謝謝,但即使通過使用try catch我沒有變爲真,而是catch塊被執行。 – reswanth

回答

2

兩件事:

  1. 的方法forName拋出一個異常,所以你需要捕捉它們或重新拋出它。

  2. 只是做Class.forName("Object")是不正確的,你需要使用所需類的完全限定域名(即與包在內)

javaDoc

參數

: className - 所需類的完全限定名稱。

String c = "java.lang.Object"; 
System.out.println(Class.forName(c).isInstance(obj)); 
+0

由'obj.getClass()。getName()'返回。 – Persixty

2

你必須圍繞嘗試catch內的代碼,或者你必須確保主可以拋出excetpion:

try { 
    System.out.println(Class.forName(c).isInstance(obj)); 
} catch(ClassNotFoundException ex) { 
    // do something in case class can not be found 
} 

public static void main(String args[]) throws ClassNotFoundException 

你不能離開代碼,該代碼能夠拋出異常,沒有任何安全網。

確保使用類的全名:在源代碼的開始

java.lang.ClassNotFoundException 

或導入:

import java.lang.ClassNotFoundException; 
1

方法Class.forName宣佈,它拋出異常的ClassNotFoundException所以在你的代碼,你要麼需要將其接住或聲明拋出的ClassNotFoundException在方法聲明。因此

Public static void main(String[] args) throws ClassNotFoundException { 

try { 
     System.out.println(Class.forName(c).isInstance(obj)); 
} catch (ClassNotFoundException ex) { 
    System.out.println(ex.getMessage()); 
}