Java异常处理

异常处理概述

举个例子:除〇问题

public class QuotientWithException {
	public static int quotient(int number1, int number2) {
		if (number2 == 0)
			throw new ArithmeticException("Divisor cannot be zero");
		return number1 / number2;
	}

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("Enter two integers: ");
		int number1 = input.nextInt();
		int number2 = input.nextInt();
		try {
			int result = quotient(number1, number2);
			System.out.println(number1 + " / " + number2 + " is " + result);
		} catch (ArithmeticException e) {
			System.out.println("Exception: an integer cannot be dicided by zero ");
		}
		System.out.println("Execution continue ... ");
	}
}

异常处理调用方法包含在一个try块和一个catch块中,try中包含正常的代码,异常被catch捕获,catch中的代码处理异常,之后执行catch之后的语句,不返回到throw语句。

异常类型


上图列出部分异常,Java定义的异常巨多无比,此处只是了解,不详述

异常可以分为三类:系统错误、异常、运行时异常。

系统错误(system error)是由Java虚拟机抛出的,用error类表示,如果发生,除了通知用户以及尽量稳妥地终止程序外,几乎什么也不能做。描述的是内部系统错误,很少发生。

异常(exception)是用Exception类表示的,描述的是由程序和外部环境所引起的错误,这些错误能被程序捕获和处理。

运行时异常(runtime exception)是用RuntimeException类表示的,通常由Java虚拟机抛出,描述的是程序设计错误。

RuntimeException、error以及它们的子类称为免检异常。其他所有异常称为必检异常,编译器会强制程序员检查并通过try-catch块处理他们,或者在方法头进行声明。

异常处理的三个操作

声明、抛出、捕获


声明异常:每个方法都必须声明它可能会抛出的必检异常的类型。但不要求显式声明免检异常。

方法要抛出的其他异常都必须在方法头中显示声明,使用 throws,如下所示:

public void myMethod() throws IOException,Exception1, ...,ExceptionN

如果方法没有在父类中声明异常,那么就不能在子类中对其进行继承来声明异常。

抛出异常:检测到错误的程序可以创建一个合适的异常类型的实例,并抛出它。使用throw。如下所示:

IllegalArgumentException ex = new IllegalArgumentException("Wrong Argument");

throw ex;

或者根据偏好,使用下面的语句:

throw new IllegalArgumentException("Wrong Argument");

捕获异常:寻找处理器的过程。处理这个异常的代码称为异常处理器。


finally子句

无论异常是否发生,finally子句总是会被执行。即使在到达finally块之前有一个return语句,finally块还是会执行。

try{

    statements;

}

catch(TheException ex){

    handling ex;

}

finally{

    finalStatements;

}

重新抛出异常

如果异常处理器不能处理一个异常,或者只是简单地希望调用者注意到该异常,Java允许该异常处理器重新抛出异常。

try{

    statements;

}

catch(TheException ex){

    perform operations before exits;

    throw ex;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值