异常的分类:
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方法结束-------------------");
}
}
}