JAVA通幽(一)异常处理机制

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/83050242

前言

      经过进阶阶段的学习,相信大家已经是小有所成了。接下来我们进入下一阶段-->通幽。其实,通幽并不代表你已经修得正果,我们仍然是在学习的路上,真理掌握在少数人的手中。闲话少说,本章介绍异常处理机制。

基本知识

1.异常的概念

在我们运行一段编译通过的看起来很正常的代码的时候,控制台突然报错了,所报的错就是我们所说的异常。程序出现异常的时候,将执行安全的退出。遇到这种情况,我们一般情况下是去检查代码并判断各种情况以解决异常。

 2.异常处理

java采用的是面向对象的方式来处理异常,其处理过程如下:

  • 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,把异常对象交给JRE
  • 捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止

则以上代码可以改写成这样:

3.异常分类

在java中,我们刚刚看到的异常属于非常常见的异常类型,详细的异常类型分类(列举部分,仅供参考)如下:

 java中分为错误和异常两大块,错误我们不需要管,我们只需要了解异常即可(尤其是RunTimeException)

一般情况下我们需要通过完善代码逻辑以解决运行时异常(RunTimeException),对于非运行时异常,我们必须进行捕获和处理。

常见的运行时异常:ArithmeticException、ClassCastException、IllegalArgumentException、IndexOutOfBoundsException、NullPointerException

4.非运行时异常的处理

非运行时异常我们必须通过捕获异常的方式来处理异常。java中有两种处理该类异常的方式:

  • 使用try-catch-[finally可选]

前面我们有提到过这个语法,也就是说try语句用来包裹可能出现异常的代码,catch语句用来根据相应的异常类型进行异常处理,finally语句表示不管有没有异常发生,我都执行这个代码。

package com.jwang.test;

import java.io.File;
import java.io.IOException;

/**
 * @author jwang
 *
 */
public class Test{
	public static void main(String[] args){
		File file = new File("ss");
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			System.out.println("无论是否发生异常我都将执行!");
			file.delete();
		}
	}
	
}
  • 使用throws关键字抛出异常,让调用本方法的语句块进行处理
package com.jwang.test;

import java.io.File;
import java.io.IOException;

/**
 * @author jwang
 *
 */
public class Test{
	public static void main(String[] args) throws IOException{
		File file = new File("ss");
		file.createNewFile();
		file.delete();
	}
}

5.自定义抛出异常

有些时候,我们在编写程序的过程中,需要主动的抛出一些异常,这时候将使用throw关键字,需要用throws声明异常类型。

throw和throws的区别:

  • throws出现在方法头;而throw出现在方法体。
  • throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
  • 两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/83050242