Java处理异常机制以及五个关键字

首先来个总的图,了解一下Java异常类的结构层次图      

Throwable:Java中所有的异常都有共同的父类Throwable(可抛出)。它有两个重要的子类Error(错误)和Exception(异常),这两个子类也包含大量的子类。

Error(错误):是程序代码无法处理的错误。大多数是java运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。

Exception(异常):是程序代码本身可以处理的异常,对异常处理以后代码不会终止运行。

    *  运行异常:都是RuntimeException类及其子类,如NullPointerException(空指针异常),IndexOutOfBoundsException(数组下标越界异常)

       该异常特点是Java并不会检查这类异常,就算没有捕捉处理(try catch)或者抛出异常(throws),编译依旧会通过。

    *  非运行时异常(编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。这是必须要处理的异常,如果不处理无法通过编译,比如一些强制异常,线程中的异常处理、IO流中的异常处理。

异常处理的关键字:

   *    try:里面是可能出现异常的语句或者代码块。后面可以跟一个或多个catch代码段。出现异常,终止try代码段的执行,根据错误的类型找到对应的catch执行。

                1)  必须在 try 之后添加 catch finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。
                2) 必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。
                3) catch 块与相应的异常类的类型相关。

   *    catch:出现异常该怎么办 (拿到异常一定做出至少一种处理)

try {
	Thread.sleep(1000);
} catch (Exception ef) {
    system.out.println("这里最好至少有一种处理方法");
}

 *    finally:无论是否产生异常都会执行。一般用于资源的清除工作,比如io流的关闭,jdbc的驱动关闭。

		InputStream in = null;
		try {
			in = new FileInputStream("文件绝对路径");

			byte[] bt = new byte[in.available()];

			String str = new String(bt);
			System.out.print(str);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				// 关闭流,释放资源
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

   *    throws:用于方法声明时出抛出 

   *    throw:用于实际手动抛出

         如果程序代码try catch处理不了某种异常(比如异常并不是该代码块产生,只有抛出)、不知道如何处理该异常、不想try catch,都可以使用抛出。但是,只要程序不停的调用这个方法,就要不停的抛出。

	public static void main(String[] args) throws Exception {
		new Test2().demo();
	}

	public void demo() throws Exception{
		int x = 1;
		if(x == 1)
			throw new Exception("手动抛出异常");
	}

自定义异常类:

1.通过继承Exception类声明自己的异常类

2.在方法适当的位置,生成自定义异常的实例,并用throw抛出

3.在方法声明部分用throws语句声明该方法可能抛出异常

public class MyException extends Exception{

	public MyException() {
		System.out.println("我的异常类");
	}
}

---------------------------------------------------

public class MyException2 {
	static int a;
	public static void main(String[] args) throws MyException {
			a = 4;
			new MyException2().test();
	}
	
	public void test() throws MyException{
		if(a<10)
			throw new MyException();
	}
}

输出:

猜你喜欢

转载自blog.csdn.net/weixin_42621338/article/details/82721476