006异常的体系结构+如何处理Exception异常

一.异常的体系结构

Java异常的体系结构

定义:在Java语言中,将程序执行中发生的不正常的情况称为“异常”。注意:开发过程中的语法错误和逻辑错误不是异常。

Java程序在执行过程中所发生的异常事件可分为两类:Error,Java虚拟机无法解决的严重问题。如:JAM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。Exception,其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如空指针访问,试图读取不存在的文件,网络连接中断。

Exception:编译时异常,在编译期间会出现的异常(执行javac.exe命令时,出现异常)。运行时异常,在运行期间出现的异常(执行java.exe命令时,出现异常)。

常见的运行时异常

//1.数组下标越界的异常:ArrayIndexOutOfBoundsException
int[] i = new int[3];
System.out.println(i[3]);
//2.算数异常:ArithmeticException
int i = 10;
Syatem.out.println( i / 0);
//3.类型转换异常:ClassCastException
Object obj = new Date();
String str = (String)obj;
//4.空指针异常:NullPointerExcetion
Person p = new Person();
p = null;
System.out.println(p.toString());

常见的编译时异常

//编译时异常,需要及时处理。
FileInputStream fis = new FileInputStream(new File(“hello.txt”));
int b;
while((b = fis.read() != -1)){
    System.out.println((char)b);
}
fis.close();

二.如何处理Exception异常

异常处理机制:对于运行时异常来说,可以不显示的进行处理。对于编译时异常来说,必须要显示的进行处理。

Java提供的是异常处理的抓抛模型

“抛”:当我们执行代码时,一旦出现异常,就会在异常的代码处生成一个对应的异常类型的对象,并将此对象抛出。(自动抛出/手动抛出(throw +异常类的对象))。一旦抛出此异常类的对象,那么程序就终止执行;此异常类的对象抛给方法的调用者;异常类,既可以是现成的异常类,也可以是自己创建的异常类;自定义一个异常类①自定义的异常类继承现有的异常类②提供一个序列号,提供几个重载的构造器。

抛出异常类的重写规则:子类重写的父类的方法,其抛出的异常类型只能是被重写的方法的异常类的子类或是异常类型一样。

“抓”:抓住上一步抛出来的异常类的对象。如何抓?即为异常处理的方式。有两种方式(①try-catch-finally②throws +  异常的类型)

//处理方式一:
try{
    //可能出现异常的代码
}catch(Exception e1){
    //处理的方式1
}catch(Exception e2){
    //处理的方式2
}finally{
    //一定要执行的代码
}

注意:try内生命的变量,类似于局部变量,出了try{}语句,就不能被调用。finally是可选的。catch语句内部是对异常对象的处理。getMessage();   printStackTrace();可以有多个catch语句,try中炮制出的异常类对象从上往下去匹配catch中的异常类的类型,一旦满足就执行Catchzhong的代码。执行完,就跳出其后的多条Catch语句。如果异常处理了,那么其后的代码继续执行。若catch中多个异常类型是“并列”关系,谁上谁下都可以。若catch中多个异常类型“包含”关系,需要将子类放在父类的上面,进行处理。否则报错!finally中存放的是一定会被执行的代码。不管try中,catch中是否仍有异常未被处理,以及是否有return语句。try-catch是可以相互嵌套的。

 

 

//处理方式二:声明抛出异常
public void readFile(String file) throes FileNotFoundException{
    … …
    //读文件的操作可能产生FileNotFoundException类型的异常
    FileInputStream fis = new FileInputStream(file);
    … …
}

如果一个方法中的语句执行时可能生成某种异常,但是并不知道该确定如何处理该异常,则此方法应显示的声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法调用者负责处理。咋方法声明中用throw语句可以声明抛出异常的列表,throw后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。异常对象可以逐层向上抛,直至main中。当然在向上抛的过程中,可以再通过try-catch-finally进行处理。

Java程序的执行过程中如出现异常,会生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。

异常对象的生成

  

发布了23 篇原创文章 · 获赞 7 · 访问量 1781

猜你喜欢

转载自blog.csdn.net/weixin_44145972/article/details/88925927