第三十五篇 Java异常处理(2)
栏目分类:java教程 发布日期:2019-11-27 浏览次数:次
第26章-Java异常处理(2)
异常捕获:
使用try和catch关键字可以捕获异常。将这二者的代码块放在异常可能发生的地方。
这样的代码我们称之为保护代码,使用语法如下:
Catch语句要包含捕获异常类型的声明,当保护代码块中发生一个异常时catch块就会检查出,若异常在catch块中异常则会被传递到块中,与传递参数的方法类似。
实现代码如下:
多重捕获块:
所谓多重捕获就是在try代码块之后跟随多个catch代码块,实现代码如下:
异常会在这三个块中进行匹配:
异常:catch_1---->不匹配
传递给catch_2---->不匹配
传递给catch_3---->匹配
若不匹配异常会在这三个中传递直到全部传递一遍。
若写了4个catch则会使以下情况:
异常:catch_1---->不匹配
传递给catch_2---->不匹配
传递给catch_3---->匹配/*catch_3接受了异常则不会传递给catch_4
没有传递给catch_4。
实现代码如下:
throws/throw关键字:
若在所使用的方法中没有捕获到一个检查性异常则该方法需要使用throws关键字来声明,throws关键字放在签名的尾部。
代码实现如下(抛出一个RemoteException异常):
一个方法抛出多个异常(用逗号隔开),参考上面的代码在throws RemoteExcetion后加逗号再添加别的异常。
Finally关键字:
注意以下几点:
Finally用来创建在try代码块后的代码块。
无论异常与否,finally代码块中的内容总会被执行。
在finally代码块中出现在catch代码块的最后。
实现语法如下:
实现代码:
注意事项:
Catch不能独立与try存在。
Try代码后面必须有catch块或finally块。
这三者之间不能存在其他代码。
自定义异常:
用户可在继承Exception类的基础上自定义异常类。
大体步骤如下:
1. 创建自定义异常类。
2. 在方法中通过throw关键字抛出异常对象。
3. 若处理异常尝试使用try-catch的语句进行捕获并处理。不然就要使用throws关键字指明要抛出给方法调用者的异常,才能继续进行下一步操作。
4. 再出现异常调用者中来捕获并处理。
实现代码:
实例代码:
通用异类:
在Java中定义了两种类型的异常和错误。
· JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
· 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。
异常捕获:
使用try和catch关键字可以捕获异常。将这二者的代码块放在异常可能发生的地方。
这样的代码我们称之为保护代码,使用语法如下:
try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 } |
Catch语句要包含捕获异常类型的声明,当保护代码块中发生一个异常时catch块就会检查出,若异常在catch块中异常则会被传递到块中,与传递参数的方法类似。
实现代码如下:
// 文件名 : ExcepTest.java import java.io.*; public class ExcepTest{ public static void main(String args[]){ try{ int arr[] = new int[2]; System.out.println("Access element three :" + arr[3]); }catch(ArrayIndexOutOfBoundsException e){ System.out.println("Exception thrown :" + e); } System.out.println("Out of the block"); } } |
多重捕获块:
所谓多重捕获就是在try代码块之后跟随多个catch代码块,实现代码如下:
try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 } |
异常会在这三个块中进行匹配:
异常:catch_1---->不匹配
传递给catch_2---->不匹配
传递给catch_3---->匹配
若不匹配异常会在这三个中传递直到全部传递一遍。
若写了4个catch则会使以下情况:
异常:catch_1---->不匹配
传递给catch_2---->不匹配
传递给catch_3---->匹配/*catch_3接受了异常则不会传递给catch_4
没有传递给catch_4。
实现代码如下:
try { file = new FileInputStream(fileName); x = (byte) file.read(); } catch(FileNotFoundException f) { // Not valid! f.printStackTrace(); return -1; } catch(IOException i) { i.printStackTrace(); return -1; } |
throws/throw关键字:
若在所使用的方法中没有捕获到一个检查性异常则该方法需要使用throws关键字来声明,throws关键字放在签名的尾部。
代码实现如下(抛出一个RemoteException异常):
import java.io.*; public class className { public void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } //Remainder of class definition } |
一个方法抛出多个异常(用逗号隔开),参考上面的代码在throws RemoteExcetion后加逗号再添加别的异常。
Finally关键字:
注意以下几点:
Finally用来创建在try代码块后的代码块。
无论异常与否,finally代码块中的内容总会被执行。
在finally代码块中出现在catch代码块的最后。
实现语法如下:
try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }finally{ // 程序代码 } |
实现代码:
public class ExcepTest{ public static void main(String args[]){ int arr[] = new int[2]; try{ System.out.println("Access element three :" + arr[3]); }catch(ArrayIndexOutOfBoundsException e){ System.out.println("Exception thrown :" + e); } finally{ arr[0] = 6; System.out.println("First element value: " +arr[0]); System.out.println("The finally statement is executed"); } } } |
注意事项:
Catch不能独立与try存在。
Try代码后面必须有catch块或finally块。
这三者之间不能存在其他代码。
自定义异常:
用户可在继承Exception类的基础上自定义异常类。
大体步骤如下:
1. 创建自定义异常类。
2. 在方法中通过throw关键字抛出异常对象。
3. 若处理异常尝试使用try-catch的语句进行捕获并处理。不然就要使用throws关键字指明要抛出给方法调用者的异常,才能继续进行下一步操作。
4. 再出现异常调用者中来捕获并处理。
实现代码:
public class MyException extends Exception{//创建自定义异常,继承Exception类 public MyException(String Error){//构造方法 super(ErrorMessage);//父类构造 } } |
实例代码:
public class Tran{ static int avg(int number1 ,int number2 )throws MyException{ if(number1<0||number2<0){ throw new MyException("不可用负数"); } if(number1>100||number2>100){ throw new MyException("数值过大"); } return (number1*number2)/2; } } public static void main(String[] args){ try{ int result=avg(102,105); System.out.println(result); } catch(MyException e){ System.out.println(e); } } |
通用异类:
在Java中定义了两种类型的异常和错误。
· JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
· 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。
本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/jiaocheng/java/477.html