欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java編程中throw和throws子句的使用方法

 更新時間:2015年09月28日 16:33:03   投稿:goldensun  
這篇文章主要介紹了詳解Java編程中throw和throws子句的使用方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

Java throw:異常的拋出
程序可以用throw語句拋出明確的異常。Throw語句的通常形式如下:

 throw ThrowableInstance;


這里,ThrowableInstance一定是Throwable類類型或Throwable子類類型的一個對象。簡單類型,例如int或char,以及非Throwable類,例如String或Object,不能用作異常。有兩種可以獲得Throwable對象的方法:在catch子句中使用參數(shù)或者用new操作符創(chuàng)建。

程序執(zhí)行在throw語句之后立即停止;后面的任何語句不被執(zhí)行。最緊緊包圍的try塊用來檢查它是否含有一個與異常類型匹配的catch語句。如果發(fā)現(xiàn)了匹配的塊,控制轉(zhuǎn)向該語句;如果沒有發(fā)現(xiàn),次包圍的try塊來檢查,以此類推。如果沒有發(fā)現(xiàn)匹配的catch塊,默認(rèn)異常處理程序中斷程序的執(zhí)行并且打印堆棧軌跡。

下面是一個創(chuàng)建并拋出異常的例子程序,與異常匹配的處理程序再把它拋出給外層的處理程序。

// 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);
  }
 }
}

該程序有兩個機(jī)會處理相同的錯誤。首先,main()設(shè)立了一個異常關(guān)系然后調(diào)用demoproc( )。 demoproc( )方法然后設(shè)立了另一個異常處理關(guān)系并且立即拋出一個新的NullPointerException實例,NullPointerException在下一行被捕獲。異常于是被再次拋出。下面是輸出結(jié)果:

Caught inside demoproc.
Recaught: java.lang.NullPointerException: demo

該程序還闡述了怎樣創(chuàng)建Java的標(biāo)準(zhǔn)異常對象,特別注意下面這一行:

 throw new NullPointerException("demo");


這里,new用來構(gòu)造一個NullPointerException實例。所有的Java內(nèi)置的運(yùn)行時異常有兩個構(gòu)造函數(shù):一個沒有參數(shù),一個帶有一個字符串參數(shù)。當(dāng)用到第二種形式時,參數(shù)指定描述異常的字符串。如果對象用作 print( )或println( )的參數(shù)時,該字符串被顯示。這同樣可以通過調(diào)用getMessage( )來實現(xiàn),getMessage( )是由Throwable定義的。

Java throws子句
如果一個方法可以導(dǎo)致一個異常但不處理它,它必須指定這種行為以使方法的調(diào)用者可以保護(hù)它們自己而不發(fā)生異常。做到這點(diǎn)你可以在方法聲明中包含一個throws子句。一個 throws 子句列舉了一個方法可能拋出的所有異常類型。這對于除Error或RuntimeException及它們子類以外類型的所有異常是必要的。一個方法可以拋出的所有其他類型的異常必須在throws子句中聲明。如果不這樣做,將會導(dǎo)致編譯錯誤。

下面是包含一個throws子句的方法聲明的通用形式:

type method-name(parameter-list) throws exception-list{
 // body of method
}

這里,exception-list是該方法可以拋出的以有逗號分割的異常列表。

下面是一個不正確的例子。該例試圖拋出一個它不能捕獲的異常。因為程序沒有指定一個throws子句來聲明這一事實,程序?qū)⒉粫幾g。

// 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( )引發(fā)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);
  }
 }
}

下面是例題的輸出結(jié)果:

inside throwOne
caught java.lang.IllegalAccessException: demo

相關(guān)文章

  • 5種java排序算法匯總工具類

    5種java排序算法匯總工具類

    這篇文章主要總結(jié)了java的快速排序,希爾排序,插入排序,堆排序,歸并排序五種排序算法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Spring Boot整合Spring Cache及Redis過程解析

    Spring Boot整合Spring Cache及Redis過程解析

    這篇文章主要介紹了Spring Boot整合Spring Cache及Redis過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java內(nèi)存模型(JMM)及happens-before原理

    Java內(nèi)存模型(JMM)及happens-before原理

    這篇文章主要介紹了java內(nèi)存模型(JMM)及happens-before原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • java程序員如何編寫更好的單元測試的7個技巧

    java程序員如何編寫更好的單元測試的7個技巧

    測試是開發(fā)的一個非常重要的方面,可以在很大程度上決定一個應(yīng)用程序的命運(yùn)。良好的測試可以在早期捕獲導(dǎo)致應(yīng)用程序崩潰的問題,但較差的測試往往總是導(dǎo)致故障和停機(jī)。本文主要介紹java程序員編寫更好的單元測試的7個技巧。下面跟著小編一起來看下吧
    2017-03-03
  • Java開發(fā)SSM框架微信支付的實現(xiàn)

    Java開發(fā)SSM框架微信支付的實現(xiàn)

    這篇文章主要介紹了Java開發(fā)SSM框架微信支付的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • java多線程開啟的三種方式你知道嗎

    java多線程開啟的三種方式你知道嗎

    這篇文章主要為大家詳細(xì)介紹了java多線程開啟的三種方式,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2022-02-02
  • 使用MyBatisPlus自動生成代碼后tomcat運(yùn)行報錯的問題及解決方法

    使用MyBatisPlus自動生成代碼后tomcat運(yùn)行報錯的問題及解決方法

    這篇文章主要介紹了使用MyBatisPlus自動生成代碼后tomcat運(yùn)行報錯的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Maven發(fā)布Jar包中文亂碼解決方法

    Maven發(fā)布Jar包中文亂碼解決方法

    這篇文章主要介紹了Maven發(fā)布Jar包中文亂碼解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 微服務(wù)如何通過feign.RequestInterceptor傳遞參數(shù)

    微服務(wù)如何通過feign.RequestInterceptor傳遞參數(shù)

    這篇文章主要介紹了微服務(wù)如何通過feign.RequestInterceptor傳遞參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 在Java和PostgreSQL枚舉之間轉(zhuǎn)換的通用方法

    在Java和PostgreSQL枚舉之間轉(zhuǎn)換的通用方法

    枚舉類型(enum)是一種方便的數(shù)據(jù)類型,允許我們指定一個常量列表,對象字段或數(shù)據(jù)庫列可以設(shè)置為該列表中的值,在本文中,我將回顧處理Java和PostgreSQL枚舉轉(zhuǎn)換的通用方法,需要的朋友可以參考下
    2023-10-10

最新評論