JAVA笔记:异常的基本概念

异常是指导致程序中断的一种指令流。

一旦产生异常之后,异常后面的语句不会执行,还是停留在异常位置,并且把异常报告给用户。

基本格式:

try{

//要执行的语句

}

catch(){

//抛出异常

}

finally{

//异常的唯一出口

}

例如:

public class ExceptionTest {
	public static void main(String args[]){
		int i = 10;
		int j =0;
		try {
			int temp = i/j;
			System.out.println(temp);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("exception:"+e);
		}finally{
			System.out.println("over");
		}
	}
}


异常类的继承结构:

Java的异常结构中 ,两个最常用的类是Exception和Error,这两个类都是Throwable 的子类。

Exception一般表示程序中出现的错误,可以用try...catch来解决;

而error指的是JVM错误,程序中无法处理。


Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Javathrow 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。 

处理异常时可以直接用System.out.println()打印异常,也可以用Exception提供的一个方法:public void printStackTrace()

Java中处理异常的过程如下:

*一旦产生异常,则会产生一个异常类的实例化对象。

*在try语句中对该异常进行捕捉

*产生的异常对象与catch语句中各个异常类型进行匹配,如果匹配成功,则执行catch中的代码

*如果最后都没有匹配成功,则程序中断执行(一般少见)



catch中的异常类型可以直接写Exception,根据输出确定,但是最好分别捕获异常。 

捕获更粗颗粒的异常语句要放在捕获更细颗粒异常的语句之后,就像漏水,沙子,石块一样,要先漏水,再是沙子,最后是石块。


throws关键字

在定义一个方法的时候可以使用throws关键字来说明,该方法不处理异常,但是调用该方法时,要处理异常。

例如:

class Math{
	public int div(int i,int j) throws Exception{
		int temp = i/j;
		return temp;
	}
}
public class ExceptionTest {
	public static void main(String args[]){
		int a = 10;
		int b = 0;
		Math math = new Math();
		try {  //必须使用try.catch捕捉异常
			System.out.println(math.div(a, b));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

假如主方法上也使用了throws Exception,则主方法也不处理异常,此时处理异常的工具就是JVM。


throw关键字

throw的作用是在程序中抛出一个异常,它抛出的异常是一个异常类的实例化对象。

例如:

public class ExceptionTest {
	public static void main(String args[]) throws Exception {
		try {
			throw new Exception("抛出一个异常");
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e);
		}
	}
}
一般实际开发中会把throw和throws结合使用。例如要显示所有的程序执行过程,同时也要打印出相关的异常,就要把所有的异常都交给方法调用处处理,

例如:

class Math {
	public int div(int i, int j) throws Exception {
		System.out.println("Start");
		int temp = 0;
		try {
			temp = i / j;
		} catch (Exception e) {
			// TODO: handle exception
			throw e;
		} finally {
			System.out.println("Over");
		}
		return temp;
	}
}

public class ExceptionTest {
	public static void main(String args[]) {

		Math math = new Math();
		try {
			System.out.println(math.div(10, 0));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}



使用异常时还可以自定义异常类,创建类继承Exception类即可。

Exception和RuntimeException的区别:

Exception在程序中必须使用try...catch处理;

RuntimeException则可以不使用try...catch处理,如果有异常产生,则交给JVM处理。



posted @ 2015-01-04 21:14  疯子乙  阅读(324)  评论(0编辑  收藏  举报