(一)什么是异常
程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程。
(二)为什么需要异常
以下例子为例,当需要手动输入一个不合法的值时:
import java.util.*;
class TestA{
public static void mian(String[] args){
Scanner sc=new Scanner(System.in);
int i=sc.nextlnt();
System.out.println("i="+i);
}
}
//通过键盘输入一个数字赋给整型变量
//若输入为字符型,则无法通过if等进行判断,Scanner无如同c语言中scanf的返回值进行判断
import java.util.*;
class TestA{
public static void main(String[] args){
Scanner sc=null;
try{
sc=new Scanner(System.in);
int i=sc.nextlnt();
System.out.println("i="+i);
}
catch(Exception e){
System.out.println("程序异常,终止运行!\n");
}
}
}
(三)异常的处理机制
1、java程序运行出现问题时,系统会自动检测到错误,并立刻生成一个与该对线对应的异常对象;
2、然后把该异常对象提交到Java虚拟机;
3、Java虚拟机会自动寻找相应的处理代码来处理异常,如果没有找到,则程序终止;
4、程序员可以自己编写代码来捕捉可能出现异常的代码,并编写代码来处理异常。
(四)异常的分类
(五) 异常的处理方式和步骤
第一种:
try{
可能出现异常的代码块;
语句一; //当语句一捕获到异常语句二永远不会执行
语句二;
}
catch(异常类型名1 变量1){
当产生括号内异常类型名1异常时的处理措施;
}
catch(异常类型名2 变量2){
当产生括号内异常类型名2异常时的处理措施;
}
finally{
无论是否捕获到异常都执行的语句;
}
第二种:
class A extends Exception{ //自定义一个异常
public A(String name){
super(name);
}
}
class B{
public void f() throws A{ //throws+异常类型名表示调用f方法时f方法可能抛出A类异常,建议调用者进行捕获处理
throw new A();//抛出一个A类异常
}
}
class TestC{
public static void main(String[] args){
B bb=new B();
try{
bb.f();
}
catch(Exception e){
System.out.printf("程序出现异常!");
}
}
}
//其中throw A不表示f方法一定抛出A类异常
//throw A 不表示调用f方法时,必须要对异常进行捕获,如RuntimeException
(六)注意事项
1、catch有且只有一个被执行,可能一个都不被执行;
2、要先catch子类异常再catch父类异常;
3、catch之间不能存在其它代码;
4、重写方法的异常不能大于被重写方法的异常范围;