一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 詳解Java編程中throw和throws子句的使用方法

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

2020-01-07 14:14goldensun JAVA教程

這篇文章主要介紹了詳解Java編程中throw和throws子句的使用方法,是Java入門學習中的基礎知識,需要的朋友可以參考下

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

?
1
throw ThrowableInstance;


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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 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在下一行被捕獲。異常于是被再次拋出。下面是輸出結果:

?
1
2
Caught inside demoproc.
Recaught: java.lang.NullPointerException: demo

該程序還闡述了怎樣創建Java的標準異常對象,特別注意下面這一行:

?
1
throw new NullPointerException("demo");


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

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

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

?
1
2
3
type method-name(parameter-list) throws exception-list{
 // body of method
}

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

下面是一個不正確的例子。該例試圖拋出一個它不能捕獲的異常。因為程序沒有指定一個throws子句來聲明這一事實,程序將不會編譯。

?
1
2
3
4
5
6
7
8
9
10
// 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 語句來捕獲該異常。正確的例子如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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);
  }
 }
}

下面是例題的輸出結果:

?
1
2
inside throwOne
caught java.lang.IllegalAccessException: demo

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好男人资源免费观看 | 清纯漂亮女友初尝性过程 | 日韩不卡一区二区三区 | 午夜剧场1000 | 美女张开大腿让男人桶 | www免费看| 国产九九在线观看播放 | 人妇小说| 久久热在线视频精品1 | 嫩草在线观看视频 | 免费xxxx日本大片在线观看 | 精品久久久久久国产 | 日韩在线a视频免费播放 | 777奇米影视一区二区三区 | 天美蜜桃精东乌鸦传媒 | 男人天堂网站在线 | 水野朝阳厨房系列在线观看 | 久久99精品久久久久久园产越南 | 国产精品成 | 国产精品久久久久这里只有精品 | 国产区香蕉精品系列在线观看不卡 | 色综合中文字幕天天在线 | 99热久热这里只精品 | 涩涩屋在线播放 | 激情亚洲天堂 | 青草网在线观看 | 亚洲 综合 欧美在线 热 | 国产一区二区三区水野朝阳 | 激情综| 亚洲欧美日韩综合一区久久 | 草草在线影院 | 先锋资源久久 | 亚洲国产第一 | 91精品国产高清久久久久 | 国产日韩欧美视频 | 肉蒲在线观看 | 欧美特级特黄a大片免费 | 色综合视频在线观看 | 5555国产在线观看精品 | 女王厕便器vk| 男人影院在线观看 |