Java基础之异常

在程序运行的过程中,可能会因为外部不可预料的因素而导致某个方法的执行失败,称之为异常,而Java有自己的异常机制

异常处理机制


try{
老王.开车();
}catch(撞车 e){
e.get车主().赔钱();
医生.抢救(老王);
}
老王.吃饭();

我们将可能会出现意外情况的语句用try-catch语句包围起来,如果没有出现意外,程序正常执行,如果出现意外,程序进入catch中的处理语句中,处理完后继续往下执行。

class T{
    static void t(){
        int a = 2/0;    print(0); 
    }
    public static void main(String s[]){
        try{ 
            t(); 
        }catch(Exception e){ 
            print(1);   
        }
        print(2); 

运行结果:1 2
这里写图片描述

运行时异常—-编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止;

受检查时异常—-要么用try。。。catch来捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不通过。

Throwable 具有两个子类
A. Exception:处理用户程序应当捕获的异常情况,即表示程序可以处理的

B. Error:Error 类的异常为内部错误,一般是与JVM相关的问题,如:JVM异常,内存不足,系统崩溃等,在正常情况下不期望用户的程序捕获它们

这里写图片描述

多重catch块

一段代码可能会生成多个异常
当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句
执行其中的一条 catch 语句之后,其他的 catch 语句将被忽略

try{
  …….
} catch(ArrayIndexOutOfBoundsException e) {
  ……
} catch(Exception e) {
  ……
}

【注意】使用多重 catch 语句时,异常子类一定要位于异常父类之前
如:

try{
  …...
} catch(Exception e) {
  ……
} catch(ArrayIndexOutOfBoundsException e) {
  ……
}//错误写法

用户自定义异常

Java API提供的内置异常不一定总能准确描述程序的错误类型,有时还需要用户自已定义异常类
自定义异常需要继承Exception或其子类
class T extends Exception{

}
如:

public class InvalidPhoneException extends Exception{
    private String phone;
    public InvalidPhoneException (String phone){
        this.phone = phone;
    }
    public String getMessage(){
        return “无效的电话号码[”+phone+”]”;
    }
    public String getPhone(){
        return phone;
    }
}
class TestException{
    static void checkPhone(String phone) throws InvalidPhoneException {     
        if(phone==null || phone.trim().length()<7){
        //假设长度小于7就是非法的电话号码
            throw new InvalidPhoneException (phone);
        }
    }
}
//throw是具体向外抛出异常的动作,所以它是抛出一个异常实例即异常对象,throws声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常,所以它后面跟的是异常类型

使用throw和throws
throws
用于定义方法可能会抛出的异常,后面跟异常的类名。当一个方法可能会抛出多个异常时,异常类间用逗号进行分隔
Eg: void t() throws ExceptionA, ExceptionB{}
注意:仅是定义可能抛出,而不是一定会抛出异常。

throw
用于抛出异常对象,后面跟创建的异常对象
Eg:throw new Exception();

finally

如果存在这样的代码:
无论try代码块中的语句是否会产生异常,这段代码都希望被执行,即使写了return也会执行,我们可以把这样的代码放到finally代码块中。

这里写图片描述

class T{
    void t(){
        try{
            int a = 1/0;
        }catch(Exception e){
        }finally{
            //不管try中的语句是否会产生异常,这里的代码总是会执行,即使try中使用了return
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值