一、异常的基本概念

1、在没有异常处理的语言中,如果要处理异常,就必须使用大量的判断语句。

2、异常处理机制的优点:易于使用,可自行定义异常类、处理抛出的异常又不会降低程序的运行速度。


二、异常处理的一般格式

try{
	//有可能出现异常的语句
}
catch(异常类  异常对象){
	//编写异常的处理语句
}
catch(异常类  异常对象){
	//编写异常的处理语句
}、、、、、
finally{
	//一定会运行到的程序代码
}

程序中加入异常处理代码,所以当有异常发生后,整个程序也不会因为异常的产生而中断执行;


三、异常类的继承结构

1、Throwable有两个子类:Exception和Error

(1)Exception:一般表示的是程序中出现的问题,可以直接使用try、、、catch处理

(2)Error:一般指的是JVM错误,程序中无法处理


四、throws与throw关键字

1、throws关键字

(1)格式:

public  返回值类型  方法名称(参数列表、、、)  throws  异常类{ }

(2)示例:

package lkp;
class Math{
public int div(int i,int j) throws Exception{
	int temp = i/j;
	return temp;
}
}

public  class Test{
	public static void main(String args[]){
		Math math = new Math();
		try{
			System.out.println("除法操作:" + math.div(10,2));
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

2、throw关键字

可以使用throw关键字认为的抛出一个异常,示例如下:

package lkp;
public  class Test{
	public static void main(String args[]){
		try{
			throw new Exception("自己抛出的异常");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

PS:但是在一般情况下,throw不会单独使用;

3、throw和throws的综合应用

package lkp;

class Math{
	public int div(int i,int j) throws Exception{//方法可以不处理异常
		System.out.println("---计算开始---");
		int temp = 0;         //声明一个整型变量
		try{
			temp = i/j;			//如果产生异常,则执行catch
		}catch(Exception e){
			throw e;
		}finally{
			System.out.println("---计算结束---");//不管是否异常都执行此方法
		}
		return temp;
	}
}

class Test{
	public static void main(String args[]){
		Math math = new Math();
		try{
			System.out.println("除法运算:" + math.div(10,0));
		}catch(Exception e){
			System.out.println("异常产生:" + e);
		}
	}
}



五、Exception和RuntimeException的区别

1、Exception在程序中必须使用try...catch进行处理

2、RuntimeException可以不使用try...catch进行处理,但是如果有异常产生,则异常将有JVM进行处理


六、自定义异常类

仅需要继承Exception类即可,简单示例如下:

package lkp;

class MyException extends Exception{
	public MyException(String msg){
		super(msg);
	}
}
class Test{
	public static void main(String args[]){
		try{
			throw new MyException("自定义异常");
		}catch(Exception e){
			System.out.println(e);
		}
	}
}



七、断言

概念:就是肯定某一个结果的返回值是正确的,如果最终此结果的返回值是错误的,则通过断言检查肯定会提示错误信息。

格式:assert   boolean 表达式;

assert boolean 表达式:详细的信息;

简单的示例如下:

package lkp;

public class Test{
	public static void main(String args[]){
		int x[] = {1,2,3};
		assert x.length == 0:"数组长度不为0";
	}
}

PS:运行时,要在命令行下加上参数-ea运行。

javac Test.java

java -ea Test