上課視頻:
鏈接:https://pan.baidu.com/s/1GCFDnN3Uc66AkobBHe7AdQ 密碼:5olh
鏈接:https://pan.baidu.com/s/1q2mbinKgeH3WYnkgOqJOwg 密碼:vomi
鏈接:https://pan.baidu.com/s/1-SkSx3ctTgE1OG3a3m7eFA 密碼:8hdq
一、如何異常處理
java錯(cuò)誤分為
有兩個(gè)重要的子類:Exception(異常)和 Error(錯(cuò)誤)仗处,二者都是 Java 異常處理的重要子類曲饱,都繼承于Throwable,各自都包含大量子類添寺。
一個(gè)是Error(錯(cuò)誤)
是程序無(wú)法處理的錯(cuò)誤趴拧,表示運(yùn)行應(yīng)用程序中較嚴(yán)重問(wèn)題溅漾。例如,Java虛擬機(jī)運(yùn)行錯(cuò)誤(Virtual MachineError)著榴,當(dāng) JVM 不再有繼續(xù)執(zhí)行操作所需的內(nèi)存資源時(shí)添履,將出現(xiàn) OutOfMemoryError。這些異常發(fā)生時(shí)脑又,Java虛擬機(jī)(JVM)一般會(huì)選擇線程終止暮胧。這些錯(cuò)誤表示故障發(fā)生于虛擬機(jī)自身锐借、或者發(fā)生在虛擬機(jī)試圖執(zhí)行應(yīng)用時(shí),如Java虛擬機(jī)運(yùn)行錯(cuò)誤(Virtual MachineError)叔壤、類定義錯(cuò)誤(NoClassDefFoundError)等瞎饲。
二口叙、Exception(異常)
一個(gè)簡(jiǎn)單異常處理案例:
如下圖
語(yǔ)法1
try{
//需要異常捕獲的代碼塊
}catch(Exception e){
//捕獲異常后需要處里的代碼塊
}
語(yǔ)法2
try{
//需要異常捕獲的代碼塊
}catch(Excetion e){
//捕獲異常后需要處里的代碼塊
}finally{
//有沒有走異常都會(huì)走的代碼塊
}
語(yǔ)法3
try{
//需要異常捕獲的代碼塊
}catch(Excetion的子類 e){
//捕獲異常后需要處里的代碼塊
}catch(Excetion的子類 e){
//捕獲異常后需要處里的代碼塊
}catch(Excetion e){
//捕獲異常后需要處里的代碼塊
}finally{
//有沒有走異常都會(huì)走的代碼塊
}
二炼绘、常見異常
1、類型轉(zhuǎn)換失敗
Car car =new BaoMa();
((AutoDriveInterface)car).autoDrive();
Exception in thread "main" java.lang.ClassCastException: com.lianwei01.BaoMa cannot be cast to com.lianwei01.AutoDriveInterface
at com.lianwei01.Test.main(Test.java:7)
2妄田、被除數(shù)不能為零
System.out.println(6/0);
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.lianwei1.Test.main(Test.java:9
3俺亮、數(shù)組下標(biāo)越界
int array[] = {4,5,7,6,3};
System.out.println(array[5]);
最大下標(biāo)是4 ,而代碼中下標(biāo)使用了5所以越界了
java.lang.ArrayIndexOutOfBoundsException: 5
at com.lianwei1.Test.main(Test.java:19)
4疟呐、空指針錯(cuò)誤
String str = null;
str.trim();
一個(gè)為空的對(duì)象去調(diào)用了這個(gè)對(duì)象所對(duì)應(yīng)為當(dāng)中的方法就會(huì)報(bào)這個(gè)錯(cuò)誤
Exception in thread "main" java.lang.NullPointerException
at com.lianwei1.Test.main(Test.java:22)
三脚曾、自定義異常
就是自己寫一個(gè)類去繼承Exception類就是自定義異常
/**
* 自定義異常
* @author apple
*
*/
public class NotFindFileExcetion extends Exception {
public NotFindFileExcetion() {
super("文件沒有找到錯(cuò)誤");
}
}
四、自己拋出異常
throws :是寫在函數(shù)后面的启具,可能會(huì)拋出很多個(gè)
throw:是具體要拋出的異常
package com.lianwei1;
public class FileUtil {
public static String findFile() throws NotFindFileExcetion,ArithmeticException {
boolean isFind= true;
if (isFind) {
int num1 = 4;
int num2= 0;
if (num2 ==0) {
throw new ArithmeticException();
}
System.out.println();
return "我找到了文件";
}else {
throw new NotFindFileExcetion();
}
}
}
五本讥、異常的捕獲順序
子類異常一定要先捕獲
try {
FileUtil.findFile();
//Exception ex = new ArithmeticException();
int num1 = 8;
int num2 = 1;
System.out.println(num1/num2);
int array [] = {3,4,6};
System.out.println(array[4]);
} catch (NotFindFileExcetion e) {
System.out.println(e.getMessage());
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
}catch (Exception e) {
System.out.println(e.getMessage());
}
上課練習(xí)
編寫代碼,在main()方法中調(diào)用類CCircle中的方法鲁冯,計(jì)算圓的面積拷沸。并且自己定義一個(gè)異常類,如果半徑為負(fù)值薯演,拋出自己定義的異常撞芍。(在類CCircle中判斷并拋出異常)
一、選擇題
1跨扮、java中用來(lái)拋出異常的關(guān)鍵字是( )
A.try B.catch C.throw D.finally
2序无、關(guān)于異常,下列說(shuō)法正確的是( )
A. 異常是一種對(duì)象 B.一旦程序運(yùn)行衡创,異常將被創(chuàng)建
C.為了保證程序運(yùn)行速度帝嗡,要盡量避免異常控制 D.以上說(shuō)法都不對(duì)
3璃氢、()類是所有異常類的父類丈探。
A.Throwable B.Error C.Exception D. AWTError
4、java語(yǔ)言中拔莱,下列哪一子句是異常處理的出口( )
A.try{…}子句 B.catch{…}子句 C.finally{…}子句 D.以上說(shuō)法都不對(duì)
5.下列程序的執(zhí)行碗降,說(shuō)法錯(cuò)誤的是( )
class MultiCatch{
public static voidmain(String args[]) {
try
{
inta=args.length;
int b=42/a;
intc[]={1};
c[42]=99;
System.out.println(“b=”+b);
}
catch(ArithmeticException e)
{
System.out.println(“除0異常:”+e);
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println(“數(shù)組超越邊界異常:”+e);
}
}
}
A.程序?qū)⑤敵龅?5行的異常信息
B.程序第10行出錯(cuò)
C.程序?qū)⑤敵觥癰=42”
D.程序?qū)⑤敵龅?9行的異常信息
6、自定義異常類時(shí)塘秦,可以繼承的類是( )
A.Error B.Applet C.Exception及其子類 D.AssertionError
10讼渊、在異常處理中,將可能拋出異常的方法放在( )語(yǔ)句塊中
A.throws B.catch C.try D.finally
11尊剔、對(duì)于try{……}catch子句的排列方式爪幻,下列正確的一項(xiàng)是( )
A.子類異常在前,父類異常在后 B.父類異常在前,子類異常在后
C.只能有子類異常 D.父類異常與子類異常不能同時(shí)出現(xiàn)
12挨稿、使用catch(Exception e)的好處是( )
A.只會(huì)捕獲個(gè)別類型的異常
B.捕獲try語(yǔ)句塊中產(chǎn)生的所有類型的異常
C.忽略一些異常
D.執(zhí)行一些程序
13.請(qǐng)問(wèn)所有的異常類皆繼承哪一個(gè)類仇轻?( )
A.java.lang.Throwable B.java.lang.Exception
C.java.lang.Error D.java.io.Exception
14.對(duì)于已經(jīng)被定義過(guò)可能拋出異常的語(yǔ)句,在編程時(shí)( )奶甘。
A.必須使用try/catch語(yǔ)句處理異常篷店,或用throw將其拋出。
B.如果程序錯(cuò)誤臭家,必須使用 try/catch語(yǔ)句處理異常疲陕。
C.可以置之不理。
D.只能使用try/catch語(yǔ)句處理钉赁。