ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java异常处理机制

2021-07-07 09:05:33  阅读:150  来源: 互联网

标签:Java 抛出 捕获 catch Checked 机制 异常


Java异常处理机制
Java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。当程序运行出现意外情形时,系统会自动生成一个 Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。
一、使用try…catch捕获异常
Java异常处理机制为:抛出异常,捕捉异常,处理异常。
try…catch语法格式
在这里插入图片描述

在使用try…catch捕获处理异常时需要注意:

  1. 不要过度使用异常,不能使用异常处理机制来代替正常的流程控制语句
  2. 异常捕获时,一定要先捕获小异常,再捕获大异常。否则小异常将无法被捕获
  3. 避免出现庞大的try块
  4. 避免使用catch(Exception e){}
  5. 不要忽略异常
    Exception类的常用方法
    在这里插入图片描述

二、Java异常体系(错误和异常)
Java把所有的非正常情况分成两种:异常(Exception)和错误(Error),它们都继承Throwable父类。
Error错误,一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。通常应用程序无法处理这些错误,因此应用程序不应该试图使用catch块来捕获Error对象。在定义该方法时,也无须在其throws子句中声明该方法可能抛出Error及其任何子类。
在这里插入图片描述

三、Java7 多异常捕获
从Java7开始,一个catch块可以捕获多种类型的异常。
在使用一个catch块捕获多种类型的异常时需要注意:
1、捕获多种类型的异常时,多种异常类型之间用竖线(|)隔开。
2、捕获多种类型的异常时,异常变量有隐式的final修饰,因此程序不能对异常变量重新赋值。
四、finally块
finally块一般用来关闭物理资源(数据库连接,网络连接,磁盘文件等),这些物理资源必须显式关闭。除非在try块、catch块中调用了退出虚拟机的方法( System.exit(0); ),否则不管在try块、catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块一定会被执行。
五、Checked异常和Runtime异常
Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常)。
1、Runtime异常:所有的RuntimeException类及其子类的实例;
2、Checked异常:不是RuntimeException类及其子类的异常实例。
只有Java语言提供了Checked异常,其他语言都没有提供Checked异常。Java认为Checked异常都是可以被处理(修复)的异常,所以Java程序必须显式处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误,无法通过编译。
Checked异常体现了Java的设计哲学:没有完善错误处理的代码根本就不会被执行。Runtime异常则更加灵活,Runtime异常无须显式声明抛出,如果程序需要捕获Runtime异常,也可以
使用try…catch块来实现。
六、使用throws抛出异常
使用throws声明抛出异常的思路是,当前方法不知道如何处理这种类型的异常,该异常应该由上级调用者处理;如果main方法也不知道如何处理这种类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。JVM对异常的处理方法是,打印异常的跟踪栈信息,并中止程序运行。
throws声明抛出异常的格式:
在这里插入图片描述

七、使用throw抛出异常
Java也允许程序自行抛出异常,自行抛出异常使用throw语句来完成(注意此处的throw没有后面的s)
如果需要在程序中自行抛出异常,则应使用throw语句,throw语句可以单独使用,throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。
八、自定义异常类
用户自定义异常都应该继承Exception基类;如果希望自定义Runtime异常,则应该继承
RuntimeException基类。定义异常类时通常需要提供两个构造器:一个是无参数的构造器;另一个是带个字符串参数的构造器,这个字符串将作为该异常对象的描述信息(也就是异常对象的getMessage()方法的返回值)。

标签:Java,抛出,捕获,catch,Checked,机制,异常
来源: https://blog.csdn.net/ITxinrin/article/details/118538972

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有