Java面向对象 —异常处理

 (1)异常

1> 程序中的异常

在Java语言中,异常是指程序在运行期间发生的事件,是导致程序中断运行的正常指令流,例如,在算术运算中除数为0、数组越界、空指针异常等,这些事件的发生都会阻止程序的正常运行。

程序中异常示例:

public class MatchCalc {
	public static int division(int dividend,int divisor) {
		return dividend/divisor;
	}
	public static void main(String[] args) {
		System.out.println(MatchCalc.division(100,0));
	}

}

运行结果如下:

上述程序在编译时没有任何异常,但是当运行“dividend/divisor”时,除数divisor值为0,就会产生异常,中断程序的运行,所以该语句后面的所有语句都不会再执行。

2>异常的分类

java中的异常按照类的层次结构进行组织,java专门设计一个Exception类来代表异常,Exception类继承自Throwable,Exception类的子类分别表示不同类型的异常。Throwable类位于异常类层次结构的顶端,它是java中所有错误和异常的父类。Error类代表java中的错误,Exception代表java中的异常。

2.1  Error错误

通常指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。通常程序无法处理这些错误。例如,现实施工中因地震而导致楼房坍塌,即类似于程序中发生了一个Error类型的异常。

2.2 Exception异常

该类型的异常在程序中发生后可以进行捕获处理,处理后程序正常运行,从而保证程序的稳定性及健壮性。java程序开发中的异常处理,主要是针对Exception类及其子类进行的。

程序中异常示例:

public class RuneException {
	public static void showRuntimeException() {
		int[]data=new int[2];
		System.out.println(data[2]);
	}

	public static void main(String[] args) {
		RuneException RunException = null;
		RunException.showRuntimeException();

	}

}

代码如下: 

(2)try-catch处理异常

java的异常处理机制可以保障程序具有较好的容错性,使程序健壮性更高。当程序运行出现意外情形时,系统会自动生成一个Exception类型的子类对象来通知程序,从而实现业务功能的代码与错误处理代码分离,使程序具有更好的可读性。

java的异常处理机制提供了两种方式来处理异常:一种是使用“try-catch”语句处理异常,另一种是在方法声明时使用throws关键字将异常抛出。

1>使用try-catch捕获异常

java将可能出现的异常语句编写在try语句块中,所有的异常处理则放在catch语句中进行处理,其语法如下:

try{
  //可能出现的异常语句
}catch(异常类型1 异常对象1){
  //对异常的处理
}

2>使用finally回收资源

当程序在try代码块中使用java程序中,打开了一些物理资源,如数据库连接、网络连接或磁盘文件等,这些物理资源都必须通过程序显示回收,为了保证一定能够回收try语句块中打开的物理资源,异常处理机制提供了finally语句块。无论try语句块中的代码是否出现异常,try语句块对应的任意一个catch语句块是否被执行,甚至在try或catch语句块中执行了return语句,finally块总会被执行。完整的java异常处理语法结构如下:

try{
  //代码
}catch(异常处理 异常对象){
  //异常处理
}finally{
  //资源回收代码
}

注意:

(1)可以使用多个catch语句块来捕获异常。

(2)try语句不能独立存在,其后至少要有一个catch语句块或finally语句块。

(3)finally语句块不是必须存在的,可以根据需求决定是否添加。

(3)throws与throws

1>使用throws声明抛出异常

当前方法不知道如何处理当前异常时,可以使用throws关键字声明抛出异常,该异常可由上一级调用者处理,throws声明只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗号隔开。throws声明抛出的语法如下:

【访问控制符】返回类型 方法名称(参数列表)throws 异常类 1,异常类 2...{}

2>throw抛出异常

在实际的企业项目开发中,系统是否要抛出异常,可能需要根据应用的业务需求来决定,如果程序中的数据处理与指定的业务需求不符,这就是一种异常。如果需要在程序中自行抛出异常,则应该使用throw语句。throw语句抛出的不是一个异常类,而是一个异常实例,且每次只能抛出一个异常实例。

throw异常类对象:

throw异常类对象

(4)自定义异常

1>创建方式

java类库提供很多可以直接处理异常的类,但有时为了更加精准的捕获和处理异常来呈现更好的用户体验,则需要开发者自行定义异常,这种异常就是自定义异常。自定义异常类需要继承Exception类。

创建一个自定义异常类:

public class AuctionException extends Exception{
//无参构造方法
public AuctionException(){
}
public AuctionException(String message){
    super(message);//调用父类有参构造器
 }
}

2>自定义异常类的应用   

当一个异常出现时,单靠某个方法无法完成处理该异常,必须由几个方法协作才可以完全处理该异常。当在异常出现的当前方法中,程序只对异常进行部分处理,还有一些处理需要在该方法的调用中完成,所以应该再次抛出异常,让该方法的调用者也能捕获到异常。

到底啦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值