java里的异常_JAVA里的异常

本文详细介绍了Java程序设计中的异常处理机制。异常是Throwable类的实例,分为Error和Exception两大类,其中Error表示系统内部错误,无法直接处理。Exception则包括运行时异常和其他异常,前者由程序错误引发,后者如I/O错误。方法需声明可能抛出的异常,用`try-catch`语句捕获异常。此外,自定义异常类可在遇到标准异常不适用时使用,确保程序健壮性。
摘要由CSDN通过智能技术生成

标签:

一、概念和分类

JAVA程序设计语言中,异常对象都是Throwable类的一个实例。

20180110173432685674.jpg

其中,Error类层次结构描述了JAVA运行时系统的内部错误和耗尽错误。这种错误无法操作,不会抛出。在设计JAVA程序时,我们需要关注Exception。

Exception包含两个分支:RuntimeException和其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException,而程序本身没有问题,但由于I/O错误这类问题导致的异常属于其他异常。

RuntimeException即是运行时异常,即在程序运行的时候才出现的异常,又称“未检查异常”,意即“编译器未检查出的异常”。

派生于RuntimeException的异常包含下面几种情况:

错误的类型转换。

数组访问越界

访问空指针

其他异常包括:

试图在文件发问后面读取数据

试图打开一个不存在的文件。

试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。

二、异常的声明

在JAVA的方法里,如果可能遇到无法处理的情况,比如要打开的文件并不存在,这时就要声明异常。声明异常的方法是在方法的首部声明所有可能抛出的异常。比如标准类库中的FileInputStream类的一个构造器的声明:

20180110173432687627.jpg

一个方法必须声明所有可能抛出的已检查异常(Exception中RuntimeException之外的其他异常),而未检查异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。

如果一个方法没有声明所有可能发生的已检查异常,编译器就会报错。

三、异常的抛出

异常的抛出使用“throw”关键字,比如一个方法可能出现EOFException,我们希望它抛出这个异常,可以用下面的语句:

throw new EOFExcetion();

或:

EOFExcetion e = newEOFException();throw e;

如果一个方法里使用了throw关键字抛出了一个异常,并且这个异常又不是RuntimeException,那么必须在方法首部用throws声明这个异常。

如果一个方法用throws声明了一个异常,那么调用这个方法的方法就必须对这个异常进行捕获,或者继续声明。(这个有一点例外,如果父类方法中没有声明异常,那么子类在覆盖父类这个方法的时候也不能声明异常,见JComponent.paintComponent方法)

四、创建异常类

有时候我们可能会遇到所有标准异常类都无法准确处理的问题,比如 int age = -1;这行代码本身没有什么问题,但是实际上年龄不可能为负数。这个时候我们就需要自己来创建一个异常类:

20180110173432689580.jpg

20180110173432691533.jpg

五、异常的捕获

如果某个异常没有在任何地方进行捕获,那么程序就会终止执行,并在控制台上打印出异常信息,其中包括异常的类型和堆栈和内容。

要想捕获一个异常,必须设置 try/catch 语句块:

try{

someCode;

}catch(ExceptionType e){

handlefor thisException;

}

如果在try语句块中的任何代码抛出了一个在catch子句中说明的异常类,那么程序将跳过try语句块的其余代码,并且执行catch子句中的处理代码。

如果在try语句块中的代码没有抛出任何异常,那么程序将跳过catch语句。

如果方法中的任何代码抛出了一个在catch子句中没有声明的异常类型,那么这个方法就会立刻退出。

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值