异常的分类:
1.系统错误(System error):

是由Java虚拟机抛出的,用Error类表示,,Error类描述的是内部系统错误,这样的错误很少发生,除了尽量稳妥的终止程序,什么也不能做。
如:VirtualMachineError :Java 虚拟机崩溃,或者运行所需的资源已经耗尽。

2.异常(exception):

是用Exception 表示的,他的描述这些错误是由系统内部和外部环境所引起的,这些错误可以被程序捕获和处理。
如:ClassNotFoundException: 试图查找一个不存在的类。
IOException: 同输入和输出相关的操作。

3.运行时异常:

是用runtimeException表示,它描述的是程序错误,例如错误的类型转换,访问一个越界数组或数值错误
如,NullPointerException 试图通过一个null引用变量访问一个对象等。

4.异常处理的三个基本操作:

A.声明异常:在头方法中使用关键字throws, 如果有多个异常,用逗号隔开。
如:public void method()throws IOException 。 多个的话public void Exception1, Exception2…ExceptionN等。
注意:如果没有在父类中声明异常,那就能在子类中对其进行继承来声明。

B.抛出异常
检测到的错误程序可以创建一个合适的类型的实例并抛出他。
方法一:

IllegalArgumentException ex = new IllegalArgument (“此处异常”);
thorw ex;

方法二:

throw new IllegalArgumentException(“此处异常”);

C.捕获异常
异常处理器:处理异常的代码块。

Try{
Statement
}
Catch(Excepton1,ex1){
//异常处理代码
}
Catch(Exception ex2){
//异常处理代码
}


或者

Catch (Exception1 |  Exception2|....|ExceptionN)

注意:异常处理程序从前往后执行,当匹配到相应的处理方法的时候将不再往后执行。
Finally 语句:
无论已成是否被捕获,代码都要执行的。一般是关闭文件,处理垃圾等。

自定义类:
Java提供了大量的异常类,尽量使用而不要创建自己的异常类。如果没有合适的异常类,可以通过派生Exception类或子类来创建自己的异常类。

Throws类:
使用格式:
包括两个部分:一个普通方法的定义,后面紧跟异常类
访问权限 返回值类型 方法名 (参数列表)throws 异常类
{
//方法体
}

throw类
如果用户希望亲自对异常类进行实例化操作,就需要依靠throw 来完成了。
与throws 不同的是,throw可以直接抛出实例化的对象。
Throw 异常类型的实例化对象。

实现代码:
public class ThrowDemo
{
	public static void main(String []args){
		int []arr=new int [5];
		try{
			setZero(arr,10);//设置越界的下标
		}
		catch(ArrayIndexOutOfBoundsException e){
			System.out.println("此处异常:"+e);//输出异常
			e.printStackTrace();//打印该异常更详细的信息
		}
		System.out.println("Main方法结束!");
	}
	private static void setZero(int arr[],int index)
		throws ArrayIndexOutOfBoundsException
	{
		System.out.println("---------setZero方法开始-----------------");
		try{
			arr[index]=0;//抛出异常
		}
		catch(ArrayIndexOutOfBoundsException ex){//异常处理器
			throw ex;
		}
		finally {
			System.out.println("-------------setZero方法结束-------------------");
		}
	}
}