第三十五篇 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
