有兩個類A和C都包含靜態塊,但只有A.java有一個主要方法。我想從A調用C,即使用forName()動態加載它。由於C沒有一個.class文件,我得到了一個ClassnotFoundException,我在使用throws子句的main中捕獲到了這個異常,但是我發現它沒有被捕獲。需要幫助搞清楚什麼我做錯了:無法捕獲拋出的異常
class A
{
static
{
System.out.println("A class static block");
}
public static void main(String[] args) throws ClassNotFoundException
{
Class.forName("C");
}
}
class C
{
static
{
System.out.println("C class static block");
}
}
輸出如下:
C:\Users\xxxx\Documents\MyJavaPrograms\MyJava>java A
A class static block
Exception in thread "main" java.lang.ClassNotFoundException: C
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at A.main(A.java:10)
你是扔在'main'異常則拋出異常。你期望什麼?如果你想使用'try/catch'來捕獲它,而不是拋出它 –
在Java中拋出一些東西意味着什麼? throws子句用於聲明不是由特定的方法來處理的異常,是給市民的指令,明確地處理這些或調用層次重新拋出起來。 ... throws關鍵字指示某個方法可能會「拋出」某個異常。 – Mona
所以我期待主拋出和異常,我正在處理它使用拋出子句或至少這是我的想法。我仍然在學習java。 – Mona