詳解Java編程中throw和throws子句的應用辦法。本站提示廣大學習愛好者:(詳解Java編程中throw和throws子句的應用辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java編程中throw和throws子句的應用辦法正文
Java throw:異常的拋出
法式可以用throw語句拋出明白的異常。Throw語句的平日情勢以下:
throw ThrowableInstance;
這裡,ThrowableInstance必定是Throwable類類型或Throwable子類類型的一個對象。簡略類型,例如int或char,和非Throwable類,例如String或Object,不克不及用作異常。有兩種可以取得Throwable對象的辦法:在catch子句中應用參數或許用new操作符創立。
法式履行在throw語句以後立刻停滯;前面的任何語句不被履行。最牢牢包抄的try塊用來檢討它能否含有一個與異常類型婚配的catch語句。假如發明了婚配的塊,掌握轉向該語句;假如沒有發明,次包抄的try塊來檢討,以此類推。假如沒有發明婚配的catch塊,默許異常處置法式中止法式的履行而且打印客棧軌跡。
上面是一個創立並拋出異常的例子法式,與異常婚配的處置法式再把它拋出給外層的處置法式。
// Demonstrate throw. class ThrowDemo { static void demoproc() { try { throw new NullPointerException("demo"); } catch(NullPointerException e) { System.out.println("Caught inside demoproc."); throw e; // rethrow the exception } } public static void main(String args[]) { try { demoproc(); } catch(NullPointerException e) { System.out.println("Recaught: " + e); } } }
該法式有兩個機遇處置雷同的毛病。起首,main()設立了一個異常關系然後挪用demoproc( )。 demoproc( )辦法然後設立了另外一個異常處置關系而且立刻拋出一個新的NullPointerException實例,NullPointerException鄙人一行被捕捉。異常因而被再次拋出。上面是輸入成果:
Caught inside demoproc. Recaught: java.lang.NullPointerException: demo
該法式還論述了如何創立Java的尺度異常對象,特殊留意上面這一行:
throw new NullPointerException("demo");
這裡,new用來結構一個NullPointerException實例。一切的Java內置的運轉時異常有兩個結構函數:一個沒有參數,一個帶有一個字符串參數。當用到第二種情勢時,參數指定描寫異常的字符串。假如對象用作 print( )或println( )的參數時,該字符串被顯示。這異樣可以經由過程挪用getMessage( )來完成,getMessage( )是由Throwable界說的。
Java throws子句
假如一個辦法可以招致一個異常但不處置它,它必需指定這類行動以使辦法的挪用者可以掩護它們本身而不產生異常。做到這點你可以在辦法聲明中包括一個throws子句。一個 throws 子句羅列了一個辦法能夠拋出的一切異常類型。這關於除Error或RuntimeException及它們子類之外類型的一切異常是需要的。一個辦法可以拋出的一切其他類型的異常必需在throws子句中聲明。假如不如許做,將會招致編譯毛病。
上面是包括一個throws子句的辦法聲明的通用情勢:
type method-name(parameter-list) throws exception-list{ // body of method }
這裡,exception-list是該辦法可以拋出的以有逗號朋分的異常列表。
上面是一個不准確的例子。該例試圖拋出一個它不克不及捕捉的異常。由於法式沒有指定一個throws子句來聲明這一現實,法式將不會編譯。
// This program contains an error and will not compile. class ThrowsDemo { static void throwOne() { System.out.println("Inside throwOne."); throw new IllegalAccessException("demo"); } public static void main(String args[]) { throwOne(); } }
為編譯該法式,須要轉變兩個處所。第一,須要聲明throwOne( )激發IllegalAccess Exception異常。第二,main( )必需界說一個try/catch 語句來捕捉該異常。准確的例子以下:
// This is now correct. class ThrowsDemo { static void throwOne() throws IllegalAccessException { System.out.println("Inside throwOne."); throw new IllegalAccessException("demo"); } public static void main(String args[]) { try { throwOne(); } catch (IllegalAccessException e) { System.out.println("Caught " + e); } } }
上面是例題的輸入成果:
inside throwOne caught java.lang.IllegalAccessException: demo