Java异常处理机制

1. 异常层次结构图

在这里插入图片描述

图片来自网络,侵删。

Java异常的处理机制是:抛出异常,捕获异常
Java异常都是对象,都派生自java.langThrowable类,主要分为Exception和Error两类

  1. Error:程序无法处理的严重错误, 比如OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
  2. Exception:程序本身可以处理的异常,分为运行时异常和编译时异常两大类。

2. Exception细分

①运行时异常(非检测异常)

包括很多,比如

  1. IndexOutOfBoundsException
  2. NullPointerException
  3. ArithmeticException
  4. IllegalArgumentException
  5. ClassNotFoundException

    这些异常不需要捕获的,代码在编译阶段不会报错,可以执行。比如常见的代码如下
public static void main(String[] args) {
    int a = 1, b = 0;
	System.out.println(a / b);
}

②编译时异常(检测异常)

这种异常必须抛出或者捕获,不然代码编译不通过。常见的有

  1. IOException
  2. SQLException

3. 异常的捕获

①. try-catch

public class ArithmeticExceptionDemo {

	public static void main(String[] args) {
		int a = 1;
		int b = 0;
		
		try {
			System.out.println("错误:" + a / b);
			System.out.println("无法输出");
		} catch (ArithmeticException e) {
			System.out.println("aa");
		} catch (RuntimeException e) {
			System.out.println("Runtime");
		}
		
		System.out.println("照样输出");
			
	}
}

如这段代码输出的结果是

aa
照样输出
  1. 在try语句块中异常的语句不会输出,其后面的语句更不会执行。
  2. catch可以编写多个,但是先编写的必须是子类,需要按小到大来排,不然编译错误,因为异常最多只能被一个catch捕获,其余的catch没事干了。
  3. 最后的 “照样输出” 是程序执行异常处理后执行的。

②. try-catch-finally

public class ArithmeticExceptionDemo {

	public static void main(String[] args) {
		int a = 1;
		int b = 0;
		
		try {
			System.out.println("hh");
			return;
		} catch (ArithmeticException e) {
			System.out.println("aa");
		} catch (RuntimeException e) {
			System.out.println("Runtime");
		} finally {
			System.out.println("finally");
		}
		
		System.out.println("照样输出");
			
	}
}

输出为

hh
finally

finally语句块是方法返回前必须执行的,也就是输出了“hh“后,下一条语句不是return;,而是执行finally语句块

也可以直接使用 try-finally

在这里插入图片描述


4. 自定义异常

public class ExceptionTest {

	public static int sum(int a, int b) {
		if (a + b >= 5)
			return a + b;
		else
			throw new MyException("和不能小于5");
	}
	
	public static void main(String[] args) {
		try {
			sum(1, 2);
		} catch (MyException e) {
			System.err.println(e.getMessage());
		}
	}
}

class MyException extends RuntimeException {
	private String message;
	
	public MyException(String error) {
		message = error;
	}
	
	@Override
	public String getMessage() {
		return "抛出异常:" + message;
	}
}

输出

抛出异常: 和不能小于5

比较简单,直接继承某个Exception即可,重写里面的一些异常信息方法即可。
使用的时候直接抛出,然后捕获

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页