博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA-Exception&Error
阅读量:5920 次
发布时间:2019-06-19

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

JAVA——Exception&Error

在万物皆对象的JAVA中,先让我们看看Exception和Error的地位吧:

avatar

可见Exception和Error都继承自Throwable类,所以二者既有相同也有不同之处。相同之处就是他们都是程序出错导致的,或说程序不正常运行才会实例化的类,不同之处就在于产生他们的的程序的出错原因不同,下面就来详细比较一下。

一,Exception&Error

从命名来看Error貌似比Exception要严重一点,事实确实如此。Error产生的情况一般是指不大可能出现且不可预料的情况,如JVM本身不正常,内存溢出,栈溢出等一些比较严重,会使程序终止的情况。而Exception通常是一些可以预料的不好的情况,如类型转换失败,多线程数据插入失败等,虽然程序出错,但可预料,一般也不会使程序终止。

二,未受检查异常和受检查异常

1,Error和Exception的子类RuntimeException都是未受检查的异常,也可以叫运行时异常,因为它们都是不可预料的,在程序运行时才会出现的异常。

2,Exception的其他子类是受检查的异常,是指程序员可以在代码中预料和捕捉到的程序异常,这也是程序员重点关注的地方。

三,异常处理

要搞清楚异常处理就得先知道try-catch-finally-return这几个关键字的语法和使用,它们在程序中的语法位置如下:

try{    //可能会产生异常的语句}catch(Exception e){    //产生异常后才会执行的代码}finally{    //不管有没有产生异常,在执行完上面两个代码块后,此处代码都会执行}

画个流程图更容易理解,如下:

avatar

注意:还有一个return的用法很多人会出错,当try-catch-finally中出现return语句时,要注意代码执行顺序,在代码中讲解,如下:

public int f1() {        int res=0;        try {            res=1;        }catch(Exception e){            }finally {            res=5;              }        return res;    }/*上面这段代码的执行结果按照前面的流程图推一下很容易知道f1()方法的返回值是5但如果是下面这种代码形式呢*/public int f2() {        int res=0;        try {            res=1;            return res;        }catch(Exception e){            }finally {            res=5;              }        return res;    }/*f2()的返回值应该是1,因为在try中执行到return语句时程序会先将要return的值入临时栈,此时finally中执行的操作改变res的值,但却不会影响到存在临时栈中return的值。再看下面这种情况*/public int f3() {        int res=0;        try {            res=1;            return res;        }catch(Exception e){            }finally {            res=5;            return res;        }    }/*此时f3()返回值应该是5,因为程序会把finally中的return值替换掉try中的return值*/

四,throw & throws

throw : 将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。(位置: 方法体内

throws : 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。用它修饰的方法向调用者表明该方法可能会抛出异常(可以是一种类型,也可以是多种类型,用逗号隔开)(位置: 写在方法名 或方法名列表之后 ,在方法体之前。)

五,自定义异常

可以继承Exception或Throwable类来定义自己的异常类型

public class MyException extends Exception{    public MyException() {            }    public MyException(String msg) {        super(msg);    }}

异常抛出方法和自带异常一样,如下

public int exceptionTest(int a) throws MyException {        if(a<10) {            System.out.println("程序正常");            return a;        }        else {            throw new MyException("程序异常");        }    }

以及捕获异常如下

public static void main(String[] args) {            Main m=new Main();        try {            int res=m.exceptionTest(11);        } catch (MyException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }

转载于:https://www.cnblogs.com/Davidhwj/p/10585887.html

你可能感兴趣的文章
Apache Camel http
查看>>
Linux远程下载文件命令
查看>>
UBUNTU安装G++
查看>>
C++ 函数返回值为对象并不调用复制构造函数
查看>>
手机下载土豆网视频复制到电脑上不能播放问题
查看>>
Linux下微信安装
查看>>
python实现目录下文件名匹配的进行迁移
查看>>
Windows安装Apache服务器(httpd),添加组件实现Flash播放器在线自由拖放MP4
查看>>
springboot集成shiro框架(2)添加缓存
查看>>
Make 命令教程
查看>>
ARP报文详解
查看>>
H3C 7503、5500、5120交换机配置端口汇聚
查看>>
项目成本管理
查看>>
linux hwclock命令参数及用法详解--linux显示/设置硬件时钟命令
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
github 重要框架
查看>>
读框架笔记(一)
查看>>
Lync 小技巧-55-Lync 客户端正常显示手机号码
查看>>
ubuntu 解决更新时出现unable to locate package
查看>>