Java第七章异常处理

异常处理概述:“异常”指的是程序运行时出现的非正常情况。 Java对异常的处理是面向对象的。即异常是一种对象,一个Java的Exception是一个描述异常情况的对象。

编程人员在编写程序的时候错误时不可避免的,一般来说,错误可分为编译错误和运行错误。 编译错误能够通过编译器检查出来,此时,程序不能继续运行。 运行错误是在程序运行过程中产生的错误 。

异常是方法代码运行时出现的非正常状态,这种非正常状态使程序无法或不能再正常继续往下运行,一些常见的异常包括:数组下标越界、除数为零、内存溢出、文件找不到、方法参数无效等。

Error类及其子类:表示普通程序很难恢复的异常。例如: NoClassDefFoundError(类定义没找到异常) OutOfMemoryError(内存越界异常) NoSuchMethodError(调用不存在的方法异常) 一般情况,这类异常比较少发生。 RuntimeException类及其子类:表示设计或实现方面的问题,例如: ArithmeticException(算术运算异常) ClassCastException(强制类型转换异常) NullPointerException(空引用异常) ArrayIndexOutOfBoundsException(数组下标越界异常) NumberFormatException(数字格式异常)  一般情况下,这类例外应尽量直接处理,而不要把它们传送给调用者处理。 Exception类及其非RuntimeException子类: 表示运行时因环境的影响而引发的异常,例如: IOException(输入输出异常)其子类包括:EOFException、FileNotFoundException、InterruptedIOException等。 InterruptedException(中断异常) 这类异常并非因设计或实现引起,是无法避免的。但一般情况下,程序员应该提供相应的代码捕捉和处理。

Java编译系统将所有的异常分为受检查的异常和不受检查的异常两大类,受检查异常要受到编译系统的检查。不受检查异常不受编译系统的检查。

处理异常分为以下两个步骤:

1. 抛出异常 在程序运行时当语义规则被违反时,将会抛出(throw)异常,即产生一个异常事件,生成一个异常对象。

2 .捕获异常 异常抛出后,异常对象提交给运行系统,系统就会从产生异常的代码处开始,沿着方法调用栈进行查找,直到找到包含相应处理的方法代码,并把异常对象交给该方法进行处理,这个过程成为捕获(catch)异常。

throw 关键字

  • throw 关键字用于手动抛出异常。你可以使用 throw 创建并抛出一个异常对象。
  • 通常,你会在方法中使用 throw 来通知调用者某些条件导致了一个异常。

引发ArithmeticException异常,throw

throws

  • throws 关键字用于方法签名中,表示该方法可能抛出某些类型的异常。
  • 当一个方法使用 throws 声明了某些异常类型时,这意味着该方法中的代码可能会导致这些异常被抛出,调用此方法的代码需要处理这些异常或继续将它们传递。
public void myMethod() throws SomeException {
    // method implementation
}

try-catch

  • try-catch 块用于捕获和处理异常。你可以尝试执行可能引发异常的代码,并使用 catch 块来捕获和处理这些异常。
  • try 块中的代码执行期间,如果抛出了一个异常,那么 catch 块会捕获并处理它。
try {
    // code that may throw an exception
} catch (SomeException e) {
    // handle the exception
}

finally

  • finally 块用于执行不管是否出现异常都应该执行的代码,例如资源清理代码。
  • 无论 try 块中的代码是否抛出异常,finally 块中的代码都会被执行。
  • finally 常用于确保资源(如文件、数据库连接或网络连接)被正确关闭或释放。

class FinallyExample {
    static void method(int i) {
        try {
            if (i == 2) {
                System.out.println("第2种情况: 发生算术运算异常");
                throw new ArithmeticException();
            }
            if (i == 3) {
                System.out.println("第3种情况: 发生数字格式异常");
                throw new NumberFormatException();
            }
            if (i == 4) {
                System.out.println("第4种情况: 发生数组下标越界异常");
                throw new ArrayIndexOutOfBoundsException();
            }
            System.out.println("第1种情况: 没有发生异常");
        } catch (ArithmeticException e) {
            System.out.println("异常被捕捉处理″");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("异常被捕捉,但又被重新引发");
            throw e;
        } finally {
            System.out.println("这是finally句");
        }
        System.out.println("这一轮结束");
    }

    public static void main(String args[]) {
        for (int i = 1; i < 5; i++) {
            try {
                method(i);
            } catch (RuntimeException e) {
                System.out.println("由main方法捕捉到异常");
            }
        }
    }
}

当异常被抛出后,如果没有被处理,程序不会执行紧接着的代码,会向下寻找能够解决异常的方法,而跳过中间的代码!

自定义异常

除了Java系统提供的异常类外,我们还可以开发自己的异常类。这个工作实际上很简单,自定义异常往往会从Exception派生而来。

创建用户自定义异常的语法格式如下: class 自定义异常类名  extends 父类异常类名{类体 ;}

class MyException extends Exception {
	public MyException(String msg) {
		super(msg);
	}
	public MyException() {
		this("My Exception");
	}
}
//之后,我们可以使用自定义异常,如下所示。
public class ExceptionTest {
	private static int i = 1;
	public ExceptionTest() {
	}
	public static void main(java.lang.String[] arg) {
		try {
			a();
		} catch (MyException e) {
			System.out.println(e.getMessage());
		}
	}
	private static void a() throws MyException {
		int i = 0;
		if (i < 10)
			throw new MyException("new desc");
	}
}

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值