异常

作者: IT_唐小探 | 来源:发表于2018-03-29 15:49 被阅读12次

使用try...catch捕获异常


•执行try块里的业务逻辑代码时出现异常,系统自动生成一个异常对象,该异常对象被提交给Java运行时环境,这个过程被称为抛出(throw)异常。

•Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块并把该异常对象交给该catch块处理,那这个过程被称为捕获(catch)异常;如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。 

访问异常信息


•如果程序需要在catch块中访问异常对象的相关信息,可以通过调用catch后异常形参的方法来获得。当Java运行时决定调用某个catch块来处理该异常对象时,会将该异常对象赋给catch块后的异常参数,程序就可以通过该参数来获得该异常的相关信息。

•所有异常对象都包含了如下几个常用方法:

–getMessage():返回该异常的详细描述字符串。

–printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。

–printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。

–getStackTrace():返回该异常的跟踪栈信息。


try

{

  需要检测的代码;

}

catch(异常类 变量)

{

  异常处理代码;

}

finally

{

  一定会执行的代码; 

}

Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。


•在Java7以前,每个catch块只能捕捉一个异常。从Java 7开始,一个catch块可以捕捉多个异常。

–catch(异常1 | 异常 2 | 异常3 ex)

–{

–}

•多个异常之间用竖线隔开。

•多异常捕捉时,异常变量之前有隐式final修饰。

–try(

–        //此处声明的资源, 系统可以自动关闭它。

–)

–{

–        //

–}

•对于Java7自动关闭资源的try语句,可以没有catch和finally——try块可以孤独地存在。

•自动关闭资源的try语句,有两个注意点:

–只有放在try后面的圆括号里的资源才会被关闭。

–能被自动关闭的资源必须实现Closeable或AutoCloseable接口。


•程序在try块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。

为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是否出现异常,也不管哪一个catch块被执行,finally块总会被执行


Checked异常与Runtime异常


•Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常)。所有RuntimeException类及其子类的实例被称为Runtime异常;不是RuntimeException类及其子类的异常实例则被称为Checked异常。

Checked异常处理:当前方法明确知道如何处理该异常,程序应该使用try...catch块来捕获该异常,然后在对应的catch块中修改该异常。•当前方法不知道如何处理这种异常,应该在定义该方法时声明抛出该异常。

•Runtime异常则更加灵活,Runtime异常无需显式声明抛出。•如果程序需要捕捉Runtime异常,也可以使用try...catch块来捕捉Runtime异常。


使用throws声明抛出异常


•throws声明抛出异常的思路是:当前方法不知道应该如何这种类型的异常,该异常应该由上一级调用者处理,如果main方法也不知道应该如何处理这种类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。JVM对异常的处理方法是:打印异常跟踪栈信息,并中止程序运行,这就是前面程序在遇到异常后自动结束的原因。

•throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗号隔开。throws声明抛出的语法格式如下

–throws ExceptionClass1 ,ExceptionClass2...


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

–throw ExceptionInstance;

•如果throw语句抛出的异常是Checked异常,则该throw语句要么处于try块里,显式捕获该异常,要么放在一个带throws声明抛出的方法中,即把该异常交给该方法的调用者处理。

相关文章

  • 异常和模块

    异常 目标 了解异常 捕获异常 异常的else 异常finally 异常的传递 自定义异常 一. 了解异常 当检测...

  • python多线程

    异常基础知识 -异常简介: 运行时错误 -异常类: 异常数据 异常名称,异常数据,异常类型 -自定义异常 clas...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

  • python核心编程-错误与异常

    本章主题:什么是异常Python中的异常探测和处理异常上下文管理引发异常断言标准异常创建异常相关模块 什么是异常 ...

  • motan(RPC)系统梳理知识点

    异常分类: 业务异常(bizException) 服务异常(serviceException) 框架异常(fram...

  • 异常

    Java异常体系 异常的分类 Java的异常分为两大类:Checked异常和Runtime异常(运行时异常)。所有...

  • 从零构架个人博客网站(二)-全局异常处理

    中间件的异常 全局异常中间件全局异常监听定义异常的返回结果定义常见的异常状态开发环境 异常查看 对于异常,我们可以...

  • Node.js异常处理

    Node.js异常分类: 变量异常 函数异常 调用异常 变量异常 未定义变量 未包含对象 变量类型错误 函数异常 ...

  • python 异常

    异常 目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释...

网友评论

      本文标题:异常

      本文链接:https://www.haomeiwen.com/subject/rsfmcftx.html