Java基础之异常
发布日期:2021-05-06 23:31:46 浏览次数:17 分类:精选文章

本文共 2955 字,大约阅读时间需要 9 分钟。

简介

java异常是java提供的一种识别、响应错误的一致性机制。异常机制可以保证正常业务代码和异常处理代码分离,保证程序的健壮性。在有效使用异常的情况下,异常能清楚的反应3W:异常类型回答什么被抛出,异常堆栈跟踪回答在哪抛出,异常信息回答为什么被抛出。

关键字

1.try:用于监听,try语句块内的代码出现异常时,异常就会被抛出。

2.catch:用于捕获异常,捕获try抛出的异常
3.finally:finally语句块总是会被执行,主要用于回收try内打开的数据库连接、网络连接、磁盘文件等。当finally块执行完后,才会执行try catch中的return、throw语句。若finally块中有return、throw,直接stop。
4.throw:用于抛出异常。
5.throws:用于签名方法中,声明该方法可能会抛出异常

try、catch基本用法

public class Hello {       public static void main(String []args){           try {               int i = 10/0;            System.out.println("i="+i);//这行不会执行        }catch (ArithmeticException e){               System.out.println("捕获到了异常:"+e.getMessage());            System.out.println("e.toString():"+e.toString());            e.printStackTrace();        }    }}

10/0就会抛出异常,被catch捕获。此外try语句块发生异常,后面的内容就不会在执行了,所以System.out.println(“i=”+i);并没有执行。

finally基本用法

还是上面的代码,加上finally语句块,最后finally语句块会被执行。

public class Hello {       public static void main(String []args){           try {               int i = 10/0;            System.out.println("i="+i);        }catch (ArithmeticException e){               System.out.println("捕获到了异常:"+e.getMessage());            System.out.println("e.toString():"+e.toString());            e.printStackTrace();        }finally {               System.out.println("执行了finally语句块");        }    }}

throw和throws用法

throw用于抛出异常,throws用于声明抛出的异常

class MyException extends Exception{       public MyException() {       }    public MyException(String message) {           super(message);    }}public class Hello {       public static void main(String []args){           try {               test();        }catch (MyException e){               System.out.println("抛出MyException");            e.printStackTrace();        }    }    public static void test() throws MyException{           try {               int i = 10/0;            System.out.println("i="+i);        }catch (ArithmeticException e){               throw new MyException("我自己声明的Exception");        }    }}

运行结果如下:

抛出MyExceptioncom.example.husky.mergesort.IO.MyException: 我自己声明的Exception	at com.example.husky.mergesort.IO.Hello.test(Hello.java:39)	at com.example.husky.mergesort.IO.Hello.main(Hello.java:27)

test方法的try语句块产生ArithmeticException,并在catch中捕获。接着抛出MyException异常,Main方法对其捕获。

Java异常框架

在这里插入图片描述框架角色拆解分析:

a.Throwable:是Java中所有错误、异常的超类,包含Error和Exception两个子类,提供了printStackTrace()接口用于获取堆栈跟踪数据的信息。
b.Exception:是Throwable的一种形式,指出了合理的程序想要捕获的条件
c.RuntimeException:在JVM正常运行期间抛出的异常的超类,编译器不会检查RuntimeException异常(发生10/0,若既没有throws抛出,也没有try catch捕获处理,也能通过编译)。如果代码产生RuntimeException,就需要通过修改代码来避免。
d.Error:是Throwable的子类,用于指示合理的程序不应该捕获的严重问题,这样多数的错误都是异常条件,且编译器也不会检查error。

Throwable结构类型

Throwable的结构可分为3种类型:被检查的异常CheckedException、运行时异常RuntimeException和错误Error

RuntimeException定义

RuntimeException及子类都被称为运行时异常。

java编译器不会去检查它,当此异常发生时若既没有抛出也没有捕获,还是会编译通过。该异常,可通过修改代码避免。

CheckedException定义

Exception类及其去除RuntimeException的子类,都属于被检查异常。

java编译器会检查它,要么捕获,要么抛出,否则不能通过编译。

Error定义

Error类及其子类。

编译器不会对Error进行检查,且程序本身无法修复错误。

上一篇:Java抽象类和接口的区别
下一篇:RandomAccessFile学习笔记

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月21日 06时24分41秒