一、什么是异常处理
在程序的开发过程中,错误通常分成两类,分别是编译错误和运行错误。编译错误时比较容易发现错误的,而运行错误特别让人头疼。所以为了增强项目稳定性,就要在出现异常是进行相关处理,也就是异常处理。
在Java中提供了一个Throwable类,它是java中所以错误和异常的超类,只有对象是此类,才能通过虚拟机进行抛出。它有两个子类,分别是Error和Exception,当发生Error时,程序员根本解决不了,只有终止程序,对于Exceptio,还可以处理,所以异常处理就是对Exception的处理。
1、try catch语句
Java程序执行过程中如果出现异常,会自动生成一个异常对象,该异常对象被自动提交给Jvm,当 jvm接受到异常对象时,会寻找处理这一异常对象的代码,并把当前异常对象交给其处理,这一过程称为catch(捕获)异常。如果jvm找不到可以捕获异常的方法,这运行时系统终止,程序也会退出。
try的意思就是测试它所含的代码是否会发生异常,而catch的意思是在异常发生时捕获它,并进行相应的处理,让程序不受异常影响继续执行下去。例如:
package test1;
public class TryDemo {
public static void main(String[] args) {
int number=0;
try{
number=Integer.parseInt(args[0]);
System.out.println("hello异常");
}
catch(Exception e){
System.out.println("非法数字");
}
}
}
还有多重catch语句
import java.util.*;
public class TryDemo {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
try{
System.out.println("请输入第一学期总学时:");
int totalTime=in.nextInt();
System.out.println("请输入第一学期课程数目:");
int totalCourse=in.nextInt();
System.out.println("第一学期各课程平均学时:"+totalTime/totalCourse);
}
catch(InputMismatchException e1){
System.out.println("输入不是数字") ;
}
catch(ArithmeticException e2){
System.out.println("课程数不能为0") ;
}
catch(Exception e3){
System.out.println("发生错误") ;
}
}}
多重catch语句需要注意一点就是由上到下,异常的范围要从小到大。
2、使用throw和throws引发异常
如果想在程序中明确地引发异常,需要用到throw 和throws。
throw语句
throw与句用来明确的抛出一个异常。需要注意的是throw抛出的是一个对象,而且throw语句一执行,后面的语句都不会执行了。
public class TryDemo {
public static void main(String[] args) {
int number=0;
try{
number=Integer.parseInt(args[0]);
System.out.println("hello异常");
}
catch(Exception e){
throw new ArrayIndexOutOfBoundsException("角标越界");
}
}
}
throws语句
如果一个方法a可以引发异常,可是他本身不对异常进行处理,那么a方法必须把这异常抛给调用者以使得程序继续执行下去。这是就要用throws语句了。
public class TryDemo {
public static void main(String[] args) {
try{
test();
}
catch(Exception e){
}
}
public static void test() throws Exception{
}
}
3、finally关键字
finally里面的代码在 jvm 没有关闭的情况下都会执行,因为在try,catch 语句了发生了异常代码就不会再执行,有时候需要关闭一些资源,finally通常用来运行关闭资源的代码。