程序错误
-编译错误(compilation error)
-运行时错误(rentime erroe)
-逻辑错误(logic error)
异常(exception):程序运行时出现的非正常情况,它中断正常的程序控制流
Java给程序员提供了处理的运行时错误的功能,即异常处理
异常类:用java累表示异常情况,可扩展,可重用
在java中,处理异常的5个关键字:
-try:捕捉异常
-catch:处理异常
-finally:不管try块中的代码如何退出,都将执行finally块
-throw:抛出异常
-throws:声明异常
一个try后面可以跟多个catch
Try后面只能有一个finally
Try和finally之间可以没有catch
Throws:如果一个方法不想处理异常,就可以通过throws语句讲异常抛向上级调用方法。
Throw:用于抛出异常,throw语句抛出的对象比较是java.lang.Throwable类或者子类的实例
Finally语句不被执行的唯一情况:
Sysem.exit(0);用于立即终止程序的运行
Finally里System.out.println(“without execute”);不会被执行
因此System.out,.println(“execute”);也不被执行
运行时异常
RuntimeException类及其子类都成为运行时异常。
特点:java编译器不会检查它
当程序可能出现异常,即使没有try-catch或者throws,编译也会通过
Return x/y;当y为0,抛出ArithmeticException
区分运行时异常和受检查异常
运行时异常表示无法让程序恢复运行的异常(原因:通常是由于执行了错误的操作)
例如:出现数组越界,需要修改代码,因此出现运行时异常,建议终止程序,java编译器不检查这种异常
受检查异常表示程序可以处理的异常,如果抛出异常的方法本身不能处理它,那么方法调用者应该去处理它,从而使程序恢复运行,不至于终止程序。
如果一个方法可能出现受检查异常,要么要try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误
常见异常:
Arithmeticexception:数学异常
如:inta,b;
a=0;
b=50/a;
IndexOutOfBoundException:数组越界异常
如:public void addNum(int[] a){
Int b=0;
For(int i=0;i<=a.lenght;i++){
B=b+a[i];
}
}
便出现异常
NullPointerException:空指针异常
例如:
Date today=null;
System.out.println((today.toString()));
SQLException :SQL异常
例如:
Ps=con.prepareStatement(“select * from user where userid=?”);
Rs=ps.executeQuery();
获取异常信息
Exception提供一些方法以便获取异常信息
toString()
getMessage()
printStackTrace()
通过扩展Exception或其子类来创建自己的异常类