java throw异常_java throw拋出异常详解
之前給大家介紹了java
throws聲明異常,那么和throws不一樣的是throw語句用來直接拋出一個異常,后接一個可拋出的異常類對象,下面的話一起來詳細的了解一下throw拋出異常吧。
下面是語法格式:throw?ExceptionObject;
注意,ExceptionObject必須是Throwable類或者是其子類的對象,哪怕是自定義異常類,也必須是Throwable的直接或者是間接子類。
例:
下面的語句會在編譯的時候產生語法錯誤:throw?new?String("拋出異常");????//?String類不是Throwable類的子類
在throw語句執行的時候,它后面的語句將不執行,這個時候,程序轉向調用者程序,尋找和它相匹配的catch語句,執行相應的異常處理程序。
假如,沒有找到相匹配的catch語句,那么,再轉向上一層的調用程序,這樣逐層向上,直到最外層的異常處理程序終止程序并打印出調用棧情況。
throw關鍵字不會單獨使用,它的使用完全符合異常的處理機制,但是,一般來講用戶都在避免異常的產生,所以不會手工拋出一個新的異常類的實例,而往往會拋出程序中已經產生的異常類的實例。
示例:
在某倉庫管理系統當中,要求管理員的用戶名需要由8位以上的字母或者數字組成,不能含有其他的字符。
當長度在8位以下時拋出異常,并顯示異常信息;
當字符含有非字母或者數字時,同樣拋出異常,顯示異常信息;
代碼:import?java.util.Scanner;
public?class?Test05
{
public?boolean?validateUserName(String?username)
{
boolean?con?=?false;
if?(username.length()?>?8)
{
//?判斷用戶名長度是否大于8位
for?(int?i?=?0;?i?
{
char?ch?=?username.charAt(i);?//?獲取每一位字符
if?((ch?>=?'0'?&&?ch?<=?'9')?||?(ch?>=?'a'?&&?ch?<=?'z')?||?(ch?>=?'A'?&&?ch?<=?'Z'))
{
con?=?true;
}
else
{
con?=?false;
throw?new?IllegalArgumentException("用戶名只能由字母和數字組成!");
}
}
}
else
{
throw?new?IllegalArgumentException("用戶名長度必須大于?8?位!");
}
return?con;
}
public?static?void?main(String[]?args)
{
Test05?te?=?new?Test05();
Scanner?input?=?new?Scanner(System.in);
System.out.println("請輸入用戶名:");
String?username?=?input.next();
try
{
boolean?con?=?te.validateUserName(username);
if?(con)
{
System.out.println("用戶名輸入正確!");
}
}
catch?(IllegalArgumentException?e)
{
System.out.println(e);
}
}
}
在validateUserName()方法中兩處拋出了IllegalArgumentException異常,也就是當用戶名字符含有非字母或者數字以及長度不夠8位的時候,在main()方法當中,調用了validateUserName()方法,并使用catch語句捕獲該方法可能拋出的異常。
運行程序,當用戶輸入的用戶名包含非字母或者數字的字符時,程序輸出異常信息,如下:請輸入用戶名:
administrator@#
java.lang.IllegalArgumentException:?用戶名只能由字母和數字組成!
用戶輸入的用戶名長度不夠8位的時候,程序同樣會輸出異常信息,如下:請輸入用戶名:
admin
java.lang.IllegalArgumentException:?用戶名長度必須大于?8?位!
以上就是對于java throw拋出異常的介紹了,你都清楚了吧,更多常見問題,可以繼續的通過奇Q工具網來進行了解哦。
推薦閱讀:
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java throw异常_java throw拋出异常详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: udp java_Java实现Udp网络
- 下一篇: java 泛型机制_java中的泛型机制