Java异常处理

Vincent · 发布于 2016-07-06 · 字数2964 · 浏览 1175 · 评论 0

异常类

Throwable类是 Java 语言中所有错误(Error)或异常(Exception)的超类

异常处理

异常声明(消极)

异常声明使用关键字throws,例如:

public static void main(String[] args) throws Exception {
        
}

异常抛出(消极)

异常抛出使用throw关键字,例如:

if (1 < 0) {
    throw new Exception("错误");
}

异常捕获(积极)

异常捕获使用try-catch块,例如:

try {
    System.out.println(1/0);
} catch (Exception e) {
    e.printStackTrace();
}

 

自定义异常

继承java.lang.Exception类,重写该类的构造方法,并在构造方法中使用super关键字调用父类的构造方法,例如:

class SecurityException extends Exception {
    public SecurityException() {
        super();
    }

    public SecurityException(String message) {
        super(message);
    }

    public SecurityException(String message, Throwable cause) {
        super(message, cause);
    }
    
    public SecurityException(Throwable cause) {
        super(cause);
    }
}

 

try-catch-finally

try {
    //可能发生异常的代码    
} catch (Exception_1 3) {
    //异常1处理代码
} catch (Exception_2 2) {
    //异常2处理代码
} catch (Exception_.. ..) {
    //异常..处理代码
} catch (Exception_n n) {
    //异常n处理代码
} finally {
    //无论是否有异常发生,此处代码都会执行,除非调用了System.exit(0)退出java虚拟机
}

注意:

1. 如果try块中有多个异常,则可以写一个catch使用java.lang.Exception一次捕获所有异常,也可以用多个catch分别捕获每类异常,

2. 如果使用多个catch,需要注意子级异常要写在父级异常之前(如果存在异常包含),因为catch的匹配顺序是由前至后按顺序进行的

3. 如果有多个catch, 并且有异常发生,则最多只有一个catch块被匹配到,即使存在异常包含

4. catch和finally不是必须出现,可以只有try-catch, 也可以只有try-finally

5. 如果try块中有多个异常,一旦发生异常,发生异常位置之后的代码(try块中)不再执行

6. 如果try块中使用了return,则执行顺序为:try块中return之前代码 -> finally块 -> return值

7. 如果try块中使用了System.exit(0),则表示退出java虚拟机,该行代码之后所有代码不再执行(包括finally块)

 

继承和接口实现中的异常处理

继承中的异常处理

1. 父类方法没有声明异常,子类在重写该方法时也不能声明异常

2. 父类方法声明了异常,子类在重写该方法时声明的异常必须和父类方法声明的异常相同或者为父类方法声明的异常的子类

3. 如果父类的方法声明的异常类型只有非运行时异常(运行时异常),则子类在重写该方法的时候声明的异常也只能有非运行时异常(运行时异常),不能含有运行时异常(非运行时异常)

有关运行时异常和非运行时异常,请参考:http://www.tuicool.com/articles/YVZBNfN

接口实现中的异常处理

接口中定义的方法声明了异常,实现该接口的方法可以不抛出任何异常,也可以抛出相同异常,也可以抛出子级异常

 

本文系作者 Vincent 授权问说网发表,并经问说网编辑,转载请注明出处和 本文链接

相关文章

  • 2016-01-16Restify基于Node.js构建REST服务
  • 2016-05-02FileReader.js在浏览器中读取文件信息
  • 2016-07-01SweetTooltip基于jQuery和CSS3链接工具提示插件
  • 2016-07-05环境搭建:php7.0.8 + Apache2.4 + MySQL5.7.13 + phpMyAdmin4.6.3
  • 2016-07-06SVN
  • 2016-07-06详细讲解JAVA中的IO流
  • 2016-07-06Spring MVC文件上传
  • 2016-07-06如何将APK安装到android模拟器中
  • 发布评论

    为您推荐

    问说网 · 发布于 2016-06-02

    C语言Side effect和Sequence point副作用

    访问易变对象,修改对象或文件,或者调用包含这些操作的函数都是副作用,它们都会改变执行环境的状态。计算表达式也会引起副作用。

    问说网 · 发布于 2016-06-24

    配置和查看Apache运行性能监控状态

    我们可以通过命令行来查看Apache的运行情况,但是无法查看Apache那些进程是处于工作状态,那些处于等待状态,当前有多少连接,还剩余多少空闲连接资源等信息。

    Vincent · 发布于 2016-07-06

    Java接口和抽象类

    抽象类 抽象类中的方法既可以有抽象方法,也可以有非抽象方法,可以全部都是抽象方法,也可以全部都是非抽象方法 抽象方法只能出现在抽象类或接口中,不能出现在非抽象类…

    Vincent · 发布于 2016-07-06

    SSH环境搭建

    Struts部分 web.xml中配置: <filter>     <filter-name>struts2</filter-na…

    使用JavaScript脚本将字母转换为摩尔斯电码
    问说网 · 发布于 2016-07-15

    使用JavaScript脚本将字母转换为摩尔斯电码

    摩尔斯电码又译为摩斯密码,是早期通信的主要技术,通过不同的排列顺序来表达不同的英文字母、数字和标点符号,在以前的战争片中经常能够看到使用摩斯密码通信,虽然这种技…

    MySQL5.6 GTID新特性实践
    问说网 · 发布于 2016-07-15

    MySQL5.6 GTID新特性实践

    GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号,GTID实际上是由UUID+TID组成的。其中UUI…

    详解MHA在Mac上的安装编译和配置
    问说网 · 发布于 2016-07-15

    详解MHA在Mac上的安装编译和配置

    MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用,在宕机的时间内,完成故障切换,部署MHA可避免主从一致性问题,…

    问说网 · 发布于 2016-08-10

    MySQL数据引擎Innodb单表数据物理恢复

    这种情况可以用来自同一台机器的的最近一次物理备份中的ibd恢复覆盖,且备份后table没有被recreate过。

    问说网手机版

    躺着 站着 跪着轻松访问

    更多详情 关于作者

    Vincent

    这个人比较懒,什么都没有填写!

    19 文章
    0 评论
    人气

    更多 热门话题

    APP界面

    关注 APP界面

    文章 41506 · 浏览 3611

    APP欣赏

    关注 APP欣赏

    文章 41427 · 浏览 3342

    APP手机界面

    关注 APP手机界面

    文章 41417 · 浏览 3603

    图片素材

    关注 图片素材

    文章 29463 · 浏览 2865

    高清图片

    关注 高清图片

    文章 26530 · 浏览 3104

    更多 推荐作者

    关注 秋天的孤寂

    文章 99 · 评论 0

    关注 怎麽继续

    文章 90 · 评论 2

    关注 倾听寂寞

    文章 83 · 评论 0

    关注 溫柔的溫柔

    文章 91 · 评论 0

    关注 走了留下什么

    文章 110 · 评论 0

    关注 莪很迷茫

    文章 97 · 评论 0

    
    顶部 反馈 评论 底部

    意见反馈

    感谢您对问说网的支持,提出您在使用过程中遇到的问题或宝贵建议,您的反馈对我们产品的完善有很大帮助。

    您的反馈我们已收到!

    感谢您提供的宝贵意见,我们会在1-2个工作日,通过您留下的联系方式将处理结果反馈给您!