java异常处理

  1. 异常处理结构

java针对异常的处理提供了try,catch,finally,throws,throw 五个核心关键字,其中前三个关键字就可以组成常用的异常处理结构,语法如下所示。

try{
    //有可能出现异常的语句
}catch(异常类型 异常对象){
    //异常处理语句
}finally{
    //一定会运行到的语句
}

注意:以上格式中的catch语句,finally语句都可选。实际上,这并不是表示catch语句,finally语句可以同时消失。得有一个。

众所周知:Java异常处理机制可以自动捕获不同类型的异常。如果try语句块在执行过程中遇到异常,则异常处之后的代码将不再被执行,系统会将异常信息封装成相应类型的异常对象,包含异常类型,异常出现时程序的运行状态及对该异常的详细描述。如果这个异常对象与catch语句中声明的异常类型相匹配,则会被自动捕获,Java异常处理机制把该异常对象赋给catch关键字后的异常参数,执行catch语句块中的语句。

Exception类型的常用方法

方法

描述

void printStackTrace()

输出异常堆栈信息。堆栈信息中包含程序运行到当前类的执行流程,他将输出从方法调用处到异常抛出处的方法调用序列

Strint getMessage()

返回异常的详细信息,该信息描述异常产生的原因,是printStackTrace()方法输出信息的一部分

  1. 多重catch语句

在实际开发中,有时会希望针对不同的异常类型采取不同的处理方式,这样就需要使用多重catch语句进行异常处理,语法如下。

try{
    //有可能出现异常的语句
}catch(异常类型1 异常对象){
    //异常处理语句
}catch(异常类型2 异常对象){
    //异常处理语句
}…………
finally{
//一定会运行到的语句
}
  1. 异常分类

通过这两个异常类可以发现,所有的异常类型都继承Java.lang.Throwable类,它有两个重要的子类,分别是Error类和Exception类。异常体系结构图如图所示。

下面分别介绍Error类和Exception类。

  1. Error类

java.lang.Error类包含仅靠程序本身无法恢复的严重错误,一般指与JVM相关的问题,是Java运行环境的内部错误或硬件问题,如内存资源部不足,JVM错误等。应用程序不应抛出这种类型的对象()。假如出现这种错误,除尽力使程序安全退出外,其他方法是无能为力的。因此在进行程序设计时,应该更关注Exception类。

  1. Exception类

java.lang.Exception类是程序本身可以处理的异常,可分为运行时(RunTimeException)异常与检查(Checked)异常。

  1. 运行时异常:可以在程序中避免的异常。这类异常在编译代码时不会被编译器检测出来,可以正常编译运行,但当程序进行时发生异常,会输出异常堆栈信息并中止程序运行,这些异常包括java.long.RuntimeException类及其子类,通过这些具体的异常类型,能够判断程序的问题所在。

java程序中常见的运行时异常

异常

说明

ArithmeticException

当出现算数错误时,抛出此异常。

ArrayIndexOutOfBoundsException

当非法索引访问数组时,抛出此异常。

ClassCatException

当试图将对象强制转换为非本对象类型的子类时,抛出异常。

IllegalArgumentException

当向方法传递了一个不合法或不正确的参数时,抛出异常。

InputMismatchException

当欲得到数据类型与实际输入的数据类型不匹配时,抛出此异常。

NullPointerException

当应用程序试图在需要对象的地方使用null时,抛出此异常。

NumberFormatException

当试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出此异常。

  1. Checked异常:除运行时异常外的异常,是由用户错误或问题引起的异常,这是程序员无法预见的。在编译时,编译器会提示这类异常需要捕获。如果不进行捕获,则会出现编译错误。

  1. 声明异常——throws关键字

语法:

public void 方法名() throws 异常类型,……{
}
  1. 抛出异常——throw关键字

语法:

throw new 异常名(参数列表);
  1. 自定义异常

当Java异常体系中提供的异常类型不能满足程序的需要时,可以自定义异常类,使用自定义异常一般有如下三个步骤。

  1. 定义异常类,继承Exception类或RuntimeException类。

  1. 编写异常类的构造方法,并继承父类的实现。常见的构造方法有四种形式,可以根据需求选择添加实现。构造方法如下所示。

public class Exception extends java.lang.Exception {
    //构造方法1
    public Exception(){
        super();
    }
    //构造方法2
    public Exception(String message){
        super(message);
    }
    //构造方法3
    public Exception(String message, Throwable cause){
        super(message,cause);
    }
    //构造方法4
    public Exception(Throwable cause){
        super(cause);
    }
}
  1. 实例化自定义异常对象,并使用throw关键字抛出。使用自定义异常实列,代码如示列:

//语法
throw new 类名(参数);

5.总结:
  • 异常是由Java应用程序抛出和处理的非常严重错误,它可以分为运行时异常和Checked异常两大类。

  • Checked异常必须捕获或声明抛出,否则无法通过编译。运行时异常不要求捕获或声明抛出。

  • java异常处理是通过五个关键字实现的:try, catch, finally, throw 和 throws。其功能如下。

  • try:用于监听。将可能抛出异常的代码放在try语句块中,当try语句内发生异常时,异常就被抛出

  • catch:用于捕获异常。catch语句用来捕获try语句块中发生的异常。

  • finally:finally语句块总是会被执行。它主要用于回收在try语句块里打开的资源(如数据库连接,网络连接和磁盘文件)。

  • throw:用于抛出异常。

  • throws:用于声明方法中可能抛出的异常。在该方法中可以不强制进行异常处理,如果出现了异常,则交给调用者进行处理。

  • 即使在try块,catch块中存在return语句,finally块中的语句也会被执行。finally块中的语句不被执行的唯一情况是在异常处理代码块中执行System.exit(1)方法。

  • 可以在一个try块后跟随多个catch块,分别处理不同的异常,但排列顺序必须是从特殊到一般,最后一个一般为Exception类。

人生最大的喜悦就是每个人都说你做不到,而你却完成了它!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zou_xi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值