码迷,mamicode.com
首页 > 其他好文 > 详细

异常总结

时间:2017-08-26 19:38:29      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:声明   范围   内容   poi   异常处理   处理   最大的   结束   方法重载   

所有的异常都是 Throwable 的子类!

而在 Throwable 下有两个子类:

Error 和 Exception ! 请解释区别?

Error:指的是JVM错误! 即:此时的程序还没有执行!如果没有执行用户无法处理!
Exception:指的是程序运行中产生的异常!用户可以处理!

所谓的异常处理指的是所有Exception以及它的子类异常!

异常处理流程:

1.当程序在运行的过程之中出现异常之后,JVM会自动根据异常的类型产生实例化一个与之类型匹配的异常对象
(用户不用关心new,由系统自动负责处理)!

2.产生了异常对象之后会判断当前的语句上是否存在异常处理,如果没有异常处理,就会交给JVM进行默认的异常处理!
处理的方式:输出异常信息,而后结束程序的调用!

3.如果此时存在由异常的捕获操作,会由try语句来捕获产生的异常类实例化对象,而后与try语句后的每一个catch进行比较!
如果现在有符合的catch捕获类型,则使用当前catch的语句来进行处理,如果不匹配,则向下继续匹配其它的catch!

4.不管最后异常处理是否能够匹配,都要向后执行,如果此时程序中存在finally语句,先执行finally中的代码
但是执行完毕后需要根据之前的catch匹配结果来决定如何执行,如果之前捕获成功,就继续执行finally之后的代码
如果没有捕获成功,就将此异常交给JVM进行默认处理(输出异常信息,而后结束程序执行)!

整个过程就好比方法重载!根据catch后面的参数类型进行匹配,但是所有的Java对象都存在自动向上转型操作支持!
简单的做法是 匹配它们的父类Exception处理就ok!

使用Exception捕获异常:

1. 在编写多个catch捕获异常时,捕获范围大的异常要放在后面!

2.虽然直接捕获比较方便,但也有缺点!因为所有的异常都会按照同样一种方式处理!
在一些要求严格的项目里,异常一定要分开处理!

throws关键字:

throws关键字主要用于方法的声明上,指的是方法之中出现异常后交给被调用处处理!

调用了使用throws声明的方法之后,不管操作是否出现异常,都必须使用try...catch进行处理!

如果在main()使用throws抛出异常,异常将交给JVM进行处理,采用默认的处理方式,输出异常信息,而后结束程序调用!

主方法上不要使用throws,因为如果程序出错,也希望可以正常执行结束调用!

throw关键字:

在程序之中可以直接使用throw手工的抛出一个异常类的实例化对象!

解释throw 和 throws 的区别?

throw:指的是在方法之中人为抛出一个异常对象(这个异常类对象可能是自己实例化或者是抛出已经存在的)!

throws:在方法声明上使用,表示此方法在调用时必须处理异常!

异常的使用格式:

代码:

class MyMath {
	// 此时div()方法上如果出现异常交给被调用处处理
	public static int div(int x,int y) throws Exception{
		int result = 0;
		System.out.println("***1.除法计算开始***");
		try {
			result = x/y;
		} catch (Exception e) {
			throw e; // 继续抛出异常
		} finally {
			System.out.println("***2.除法计算结束***");
		}
		return result;
	}
}
public class Demo {
	public static void main(String[] args) {
		try {
			System.out.println(MyMath.div(10, 0));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

RuntimeException类:(运行时异常)

在Java中为了方便用户编写代码,专门提供一种RuntimeException类!这种异常类最大的特征是:
程序在编译的时候不会强制性的要求用户处理异常,用户了可以根据自己的需要选择型的进行处理!
但是如果没有处理又发生异常了,将交给JVM进行默认的处理!
也就是说RuntimeException的子异常类,可以根据用户需要选择进行处理!

请解释Exception 和 RuntimeException 的区别?

Exception 是 RuntimeException的父类,使用Exception定义的异常必须要被处理,而RuntimeException的异常可以选择性得到进行处理!

Exception(强制处理!)、RuntimeException(选择处理!)

请列举出几个常见的 RuntimeException 类?

ArithmeticException NullPointerException ClassCastException

assert关键字:

主要功能是进行 断言!

Java中的断言指的是程序执行到某行代码处时一定是预期的结果!

默认情况下断言是不应该影响程序运行的,也就说在Java解释程序的时候,断言是默认不起作用的!

启用断言: java -ea Demo

public class Demo {
	public static void main(String[] args) {
		int num = 10;
		// 中间可能经了20行代码来操作num的内容
		// 期望中的内容应该是20
		assert num == 20 : "num的内容不是20";
		System.out.println("num="+num);
	}
}

  

自定义异常:

虽然Java中提供了大量的异常,但是在实际开发中往往不够用!

例如:AddException

 

class AddException extends Exception {
	public AddException(String msg){
		super(msg);
	}
}
public class Demo {
	public static void main(String[] args) {
		int num = 20;
		try {
			if(num > 10){ // 出现错误,英爱产生异常
				throw new AddException("数值传递过大!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

总结:

1.Exception的父类是Throwable,但是在编写代码的时候尽量不要使用Throwable,因为Throwable下还包含对了Error子类!
我们能够处理的只有Exception子类!

2.异常处理的标准格式:try,catch,finally,throw,throws;

3.RuntimeException 和 Exception 的区别!

异常总结

标签:声明   范围   内容   poi   异常处理   处理   最大的   结束   方法重载   

原文地址:http://www.cnblogs.com/9513-/p/7435928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!