java 异常_Java学习——异常与异常处理
一、異常簡介
異常:程序出現(xiàn)意外導致中斷指令流的一種事件。
異常是一個類,繼承于Throwable類,其中包括2個主要大類:Error(錯誤) 和 Exception(異常)。
Error:包括虛擬機錯誤和線程死鎖,一旦Error出現(xiàn)了,程序就徹底的掛了,被稱為程序終結(jié)者;
Exception:分為編譯期異常和運行時異常(RuntimeException)
實踐代碼,搓搓小手動起來(=!=):
幾個常見的異常:
public class ExceptionClass {public static void main(String[] args) {int a[] = new int[10];//數(shù)組越界異常 java.lang.ArrayIndexOutOfBoundsException: 10System.out.println(a[10]);//空指針異常 java.lang.NullPointerException//a=null;//System.out.println(a.length);//算數(shù)異常 java.lang.ArithmeticException: / by zero//System.out.println(1/0);//byte b=200;//編譯期異常//類轉(zhuǎn)換時異常 java.lang.ClassCastException//ExceptionClass t = (ExceptionClass)new Object();//字符串的索引越界 java.lang.StringIndexOutOfBoundsException: String index out of range: 8//String s = "hello";//s.charAt(8);} }輸出結(jié)果:
二、異常處理
1.try-catch-finally語句
try: 用于監(jiān)聽可能拋出異常的代碼
catch: 用于捕獲try語句塊中發(fā)生的異常
finally:finally語句塊總是會被執(zhí)行
try語句塊不可以獨立存在,必須與 catch 或者 finally 塊同存
catch可以有多個
語法:
try-catch-finally
try{
可能出現(xiàn)問題的代碼
}catch(Exception e){
出現(xiàn)問題后的解決方法
}finally{
一定會執(zhí)行的代碼
}
實踐代碼,搓搓小手動起來(=!=):
public class DisposeClass {public static void main(String[] args) { // try-catch-finallytry {//可能出現(xiàn)問題的代碼System.out.println(1 / 0);} catch (Exception e) {//對于這個問題的解決方案System.out.println("除數(shù)不能為0");}finally {//程序一定執(zhí)行的代碼,除非虛擬機炸了System.out.println("try-catch-finally");} } }2.throw和throws關(guān)鍵字
異常拋出(拋異常)通常使用throw和throws關(guān)鍵字來實現(xiàn)。
throws:聲明將要拋出何種類型的異常(聲明異常)。
當前異常在本方法中解決不了,拋出異常,誰調(diào)用誰處理。
實踐代碼,搓搓小手動起來(=!=):
public class DisposeClass {public static void main(String[] args) {//調(diào)用存在異常的方法try {fun();} catch (Exception e){System.out.println("算數(shù)異常");e.printStackTrace();//打印異常信息}}// throws//可能存在異常問題的方法,誰調(diào)用誰處理public static void fun() throws Exception{System.out.println(1/0);} }throw:將產(chǎn)生的異常拋出,是拋出異常的一個動作
public class ThrowClass {public static void main(String[] args) {Boolean a=true;if (a) {//如果a==ture,則拋出異常throw new NullPointerException();}} }拋出的異常是可以自定義的
編譯期異常,自定義異常類繼承Exception,需要標明當前方法可能拋出的異常
運行期異常,自定義異常類繼承RuntimeException,不需要標明 當前方法可能拋出的異常
實踐代碼,搓搓小手動起來(=!=):
public class Atm {int money;public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}//存錢public void add(int money) {this.money+=money;}//取錢public void reduce(int money) throws MoneyException, MoneyNotEnoughException {if (money<0) {//編譯期異常,MoneyException繼承Exception,需要標明當前方法可能拋出的異常throw new MoneyException("拋出異常:錢不能為負數(shù)");} else if (this.money<money) {//運行期異常,MoneyNotEnoughException繼承RuntimeException,不需要標明 當前方法可能拋出的異常throw new MoneyNotEnoughException();}this.money-=money;} }下面2個是自定義的異常類
public class MoneyException extends Exception{//當繼承Exception時,代表當前類為編譯時異常,必須標明當前方法可能拋出的異常public MoneyException(String str) {super(str);} } public class MoneyNotEnoughException extends RuntimeException {//當某一個類繼承RuntimeException,代表當前類為運行時異常,不需要標明方法可能拋出的異常public MoneyNotEnoughException() {super("拋出異常錢不夠了");} }public class CustomTest {int a = 100;public static void main(String[] args) {Atm atm = new Atm();atm.setMoney(100);atm.add(100);System.out.println("現(xiàn)有金錢:"+atm.money);try {atm.reduce(-300);} catch (MoneyNotEnoughException | MoneyException m) {System.out.println("現(xiàn)有金錢:"+atm.money);m.printStackTrace();//打印異常信息}} }輸出結(jié)果:
throw和throws的區(qū)別:
1、throws出現(xiàn)在方法函數(shù)頭;而throw出現(xiàn)在函數(shù)體
2、throws表示可能出現(xiàn)異常;而執(zhí)行throw語句則一定拋出了異常
今天學習分享的內(nèi)容到此為止了,本是想要激勵自己學下去,但發(fā)現(xiàn)快樂更是知識在于分享!
作為初學者對于Java的理解實在淺薄,如有錯誤請指正,萬分感謝!
總結(jié)
以上是生活随笔為你收集整理的java 异常_Java学习——异常与异常处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 训练集 测试集 验证集_Python机器
- 下一篇: python从基础到入门电子书_pyth