Java 异常机制处理方式

异常的处理办法之一,捕获异常

上面过程详细解析:

try块

try语句指定了一段代码,该段代码就是一次捕获并处理的范围。在执行过程中,当任意一条语句产生异常时,就会跳过该段中后面的代码。代码中可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理

一个try语句必须带有至少一个catch语句块或一个finally语句块 

注:当异常处理的代码执行结束以后,是不会回到try语句去执行尚未执行的代码。

catch

a)每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

b)常用方法:

toString ( )方法,显示异常的类名和产生异常的原因

getMessage( )方法,只显示产生异常的原因,但不显示类名。

printStackTrace( )方法,用来跟踪异常事件发生时堆栈的内容。

这些方法均继承自Throwable类 

c)Catch捕获异常时的捕获顺序:  

i.如果异常类之间有继承关系,在顺序安排上需注意。越是顶层的类,越放在下面。再不然就直接把多余的catch省略掉。 

finally

有些语句,不管是否发生了异常,都必须要执行,那么就可以把这样的语句放到finally语句块中。

通常在finally中关闭程序块已打开的资源,比如:文件流、释放数据库连接等。

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
  
public class TestException {
       public static void main(String[] args) {
               FileReader reader = null;
               try {
                        reader = new FileReader("d:/a.txt");
                        char temp = (char) reader.read();
                        System.out.println("读出的内容:" + temp);
               } catch (FileNotFoundException e) {
                        System.out.println("文件没有找到!!");
                        e.printStackTrace();
               } catch (IOException e) {
                        e.printStackTrace();
                        System.out.println("文件读取错误!");
               } finally {
                        System.out.println(" 不管有没有异常,我肯定会被执行!");
                        try {
                                 reader.close();
                        } catch (IOException e) {
                                 e.printStackTrace();
  
                        }
               }
  
       }
}

异常的处理办法之二,声明异常:throws子句 

当Checked Exception产生时,不一定立刻处理它,可以再把异常Throws出去。

在方法中使用try-chatch-finally由这个方法处理异常。在一些情况下,当前方法并不需要处理发生的异常,而是向上传递给调用它的方法处理

如果一个方法中可能产生某种异常,但是并不能确定如何处理这种异常,则应根据异常规范在方法的首部声明该方法可能抛出的异常。

如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常,之间以逗号隔开。

package com.bjsxt.Exception;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class FileTest {
    public static void main(String[] args) {
        try {
            readFile("d:/a.txt");
        } catch (FileNotFoundException e) {
            System.out.println("所需要的文件不存在!");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("文件读写出错误!");
            e.printStackTrace();
        }
    }
 
    public static void readFile(String fileName) throws IOException {
        FileReader in = new FileReader(fileName);
        try {
            int tem = 0;
            tem = in.read();
            while (tem != -1) {
                System.out.println((char) tem);
                tem = in.read();
            }
        } finally {
            in.close();
        }
    }
 
}

方法重写中声明异常原则 :

子类声明的异常范围不能超过父类声明的范围。包含如下意思:

1.父类没有声明异常,子类也不能;

2.不可抛出原有方法抛出异常类的父类或上层类 

3.抛出的异常类型的数目不可以比原有的方法抛出的还多(不是指个数)

异常的处理办法之三,手动抛出异常,throw子句 

Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要手工创建并抛出。

在捕获一个异常前,必须有一段代码先生成异常对象并把它抛出。这个过程我们可以手工做,也可以由JRE来实现,但是他们调用的都是throw子句。

对于一个已经存在的异常类,抛出该类异常对象过程如下:

找到一个合适的异常类。

创建一个该类的对象。

将对象抛出

File f = new File("c:/tt.txt");
if (!f.exists())  {
try {
throw new FileNotFoundException("File can't be found!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

猜你喜欢

转载自blog.csdn.net/mengxianglong123/article/details/88044766