异常处理:
java.lang.Throwable
Error:错误,程序终止运行
Exception:异常,在编写程序时,考虑到对这些异常的处理
1.编译时异常:(javac.exe命令时,抛出的异常)
2.运行时异常:(java.exe命令时,抛出的异常)
常见的运行时异常:
1.数组下标越界
2.空指针
处理Exception异常:抓抛模型
1.抛:当我们执行代码时,一旦出现异常,就在异常代码处生成一个对应的异常类型的对象,并将此对象抛出(自动抛出/手动抛出 )
一旦将此异常对象抛出,程序终止执行
此异常类的对象抛给方法的调用者
2.抓:抓住上一步抛出异常类的对象,如何抓,即异常处理方式。
异常处理方式一:try-catch-finally (右键 soundwith)
try{
//可能出现异常的代码
}catch(Exception1 e1){
//处理的方式1
}catch(Exception2 e2){
//处理方式2
}finally{
//一定要执行的代码
}
注:1.try内声明的变量,类似于局部变量,出了try{}语句,就不能被调用
2.finally语句是可选的
3.catch语句内部是对异常对象的处理
getMessage();
printStackTrace();
4.有多个catch语句,try中抛出的异常类对象从上往下去匹配catch中的异常类的类型,一旦满足,就执行该catch中的语句,执行完后就跳出,其余catch语句不再执行
5.异常处理之后,其后代码继续执行
6.catch中的异常类型如果是“并列”关系,孰上孰下无所谓
但是若catch中的异常类型是“包含”关系,必须将父类的放在上面进行处理,否则报错
7.finally中存放的是一定会被执行的代码,不管try catch中是否仍有异常未被处理,以及是否有return返回值
8.try-catch是可以嵌套的
3.对于运行时异常,可以不进行显式的处理
但是对于编译时异常,必须进行显式的处理
异常处理方式二:在方法的声明处,显式的抛出该异常对象的类型
public void method() throws FileNotFoundException, IOException{
FileInputStream fis = new FileInputStream(new File("hello.txt"));
int b;
while((b = fis.read()) != -1){
System.out.print((char)b);
}
fis.close();
}
当在此方法的内部出现异常的时候,会抛出一个异常类的对象,抛给方法的调用者
异常的对象可以逐层的向上抛,直至main中,当然,在抛的过程中,可以用try-catch-finally进行处理
Java的异常处理:抓抛模型
1.抓:异常的处理,有两种方式(1.try-catch-finally, 2.throws+异常的类型)
2.抛:一旦执行过程中,出现异常,会抛出一个异常类的对象。(自动抛出 vs 手动抛出(throw + 异常类的对象))
手动抛出异常:throw RuntimeException("运行时间过长");(异常类,既可以是现成的异常类,也可以是自己创建的异常类)
若是RuntimeException,可以不显式的处理
若是Exception,必须要显式的处理
自定义的异常类:
1.自定义的异常类继承现有的异常类
2.提供一个序列号,提供几个重载的构造器
注:子类重写的父类的方法,其throws的异常类型只能小于或等于被重写的父类的方法的异常类型