程序出现错误后,系统会自动抛出异常;此外,Java 也允许程序自行抛出异常,自行抛出异常使用 throw 语句来完成。
本文包含:

  1. 抛出异常
  2. 自定义异常类
  3. catch 和 throw 同时使用
  4. Java 7 增强的throw 语句
  5. 异常链

1. 抛出异常

如果需要在程序中自行抛出异常,则应使用 throw 语句,throw 语句可以单独使用,throw 语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。throw 语法的语法格式如下:

throw  ExceptionInstance;

可以使用 throw 语句实现如下代码:

下面程序中粗体字代码使用 throw 语句来自行抛出异常。当 Java 运行时接收到开发者自行抛出的异常时,会中止当前的执行流,跳到该异常对应的 catch 块来处理该异常。即不管是系统自动抛出的异常还是程序员手动抛出的异常,Java 运行时环境对异常的处理没有任何差异。

如果 throw 语句抛出的异常是 Checked 异常,则该 throw 语句要么处于 try 块里,显式捕获该异常,要么放在一个带 throws 声明抛出的方法中,即把该异常交给该方法的调用者处理;
如果 throw 语句抛出的异常是 Runtime 异常,则该语句无须放在 try 块里,也无须放在带 throws 声明抛出的方法中;程序既可以显式使用 try…catch来捕获并处理该异常,也可以完全不理会该异常,把该异常交给该方法调用者处理。
例如下面例子:

通过上面程序可以看出,自行抛出Runtime 异常比自行抛出Checked 异常的灵活性更好。同样。抛出 Checked 异常则可以让编译器提醒程序员必须处理该异常。

2. 自定义异常类


下面例子程序创建了一个自定义异常类:


在大部分情况下,创建自定义异常都可采用与 AuctionException.java 相似的代码完成,只需改变 AuctionException 异常的类名即可,让该异常类的类名可以准确描述该异常。

3. catch 和 throw 同时使用

前面出现的异常处理方式有如下两种:



4. Java 7 增强的throw 语句

对于下面代码:

5. 异常链

真实的企业级应用具有严格的分层关系,上层功能的实现严格依赖于下层的 API,也不会跨层访问。下图显示了这种具有分层结构应用的大致示意图:

对于采用上图结构的应用而言,当业务逻辑层访问持久层出现 SQLException 异常时,程序不会把底层的 SQLException 异常传到用户界面,有如下两个原因:

  1. 对于正常用户而言,他们不想看到底层 SQLException 异常,该异常对他们使用系统没有帮助。
  2. 对于恶意用户而言,将 SQLException 异常暴露出来不安全。

通常的做法是:程序先捕获原始异常,然后抛出一个新的业务异常,新的业务异常中包含了对用户的提示信息,这种处理方式被称为异常转译。假设程序需要实现工资计算的方法,则程序应该采用如下结构的代码来实现该方法:



创建了这个 SalException 业务异常类后,就可以用它来封装原始异常,从而实现对异常的链式处理。

Java 使用 throw 抛出异常相关推荐

  1. java throw抛出异常

    1.throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象.如下面例子所示: public cl ...

  2. java的throw_浅谈Java的throw与throws

    浅谈Java异常 以前虽然知道一些异常的处理,也用过一些,但是对throw和throws区别还是有不太清楚.今天用实例测试一下 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被 ...

  3. java throw与throws_基于Java中throw和throws的区别(详解)

    系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...

  4. throws java_基于Java中throw和throws的区别(详解)

    系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...

  5. 【零基础学Java】—throw关键字(四十六)

    [零基础学Java]-throw关键字(四十六) 一.throw关键字 public class demo {public static void main(String[] args) {//创建i ...

  6. java捕获异常和抛出异常_Java捕获多个异常,重新抛出异常

    java捕获异常和抛出异常 In Java 7, catch block has been improved to handle multiple exceptions in a single cat ...

  7. java中throw是什么意思_Java中throw和throws的区别是什么

    Java中throw和throws的区别是什么 发布时间:2020-07-22 11:26:39 来源:亿速云 阅读:83 作者:Leah 这篇文章运用简单易懂的例子给大家介绍Java中throw和t ...

  8. java为什么要抛出异常_java抛出异常是怎么回事?

    一.Java异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如 ...

  9. java catch中抛出异常_简单了解Java编程中抛出异常的方法

    任何Java代码都可以抛出异常,如:自己编写的代码.来自Java开发环境包中代码,或者Java运行时系统.无论是谁,都可以通过Java的throw语句抛出异常.从方法中抛出的任何异常都必须使用thro ...

  10. java的throw不常用吗_java中的throw与throws的区别

    什么时运行时异常?什么是非运行时异常? 通俗的讲: 运行时异常:就是编译通过,运行时就崩了,比如数组越界. 非运行时异常:就是编译不通过,这时就得必须去处理了.不然就没法运行了. 全面的讲: Thro ...

最新文章

  1. 美国劳工统计局使用机器学习自动执行数据编码
  2. git reset --hard 恢复
  3. 二分查找(递归和非递归)
  4. java 关于分页的实现
  5. 设计模式——桥梁模式
  6. Python丨为什么你学不好设计模式?
  7. 如果你扯了团队后腿,你应该内疚
  8. PL/SQL程序设计以及安全管理实验遇到的问题及解决
  9. trimble ux5hp无人机航测_无人机航测:这几件事情你必须知道
  10. Visual C++中回调函数使用的变身大法
  11. netty之管道处理流程
  12. struct vsf_sysutil_statbuf
  13. H3C Comware的作用
  14. 计算机在聋校教学中有哪些作用,现代信息技术在聋校语文教学中的应用
  15. ML和PR相关书籍及下载
  16. 自己用jQuery写一个瀑布流
  17. 7-11 超级玛丽 (10 分)
  18. 售后单导出(抖音、快手)
  19. 顶会CIKM‘21论文解读:基于图神经网络的人类行为轨迹恢复模型
  20. 可擦写光盘不能擦除和刻写_什么是可擦写光盘

热门文章

  1. HTML5主要针对什么进行优化,html5哪些标签可以优化SEO?
  2. 渥太华大学OU-iti1120 Assignment 1课业解析
  3. C++随机生成中文名的实例
  4. 面向对象文字游戏,蜈蚣怪和蛇怪
  5. 计算机运行但屏幕黑屏,电脑显示器黑屏,教您电脑主机运行正常显示器黑屏怎么办...
  6. java对象 内存逃逸_JVM内存逃逸
  7. Httpwatch中http状态码列表
  8. C# WinForm开发系列之DataTimePicker控件显示月份的限制和关于DataTimePicker和monthCalendar的样式设置问题
  9. 为 “超级大脑”构建支撑能力,腾讯云聚焦AI技术落地
  10. 百度网盘批量上传文件工具