Java入门:14.异常与异常对象,抛出异常,自定义异常,异常处理,受检与非受检异常--002

4 处理异常

  • 我们调用其他工具类时,传递了一些信息。

  • 工具类在使用我们提供的信息执行功能时出现了问题,不知道该如何处理

  • 就会将问题形成一个异常对象描述,并抛给我们(此时我们是调用者)

  • 这个时候我们应该如何处理异常呢?

  • 异常处理的过程是:要么我们在当前的方法中处理,要么就继续向上抛,抛给我们的调用者处理

       如果一直都没有方法处理,最终会抛给JVM。JVM会打印错误信息并停止程序

       过程中如果一个方法无法处理这个异常

               1.重新创建一个异常对象,手动throw抛给调用者

                2.不做任何处理,会自动抛给调用者

  • 我们如何处理异常?

在方法中,使用try{}包裹可能产生异常对象的代码

运行时一旦产生了异常对象,try就会对其进行捕获

会将异常对象交给对应的catch来处理

public void t1(int age){
    if(age < 0 || age > 150){
        throw new AgeOutOfBoundsException();
    }
}
​
//----------------------------
  
public void t2(){
    int age =scanner.nextInt();
    try{
        t1(age);
    }
}

在try{}代码块后面跟着catch{}来处理指定的异常问题

在try的后面跟多个catch,来处理不同的异常情况

public void t2(){
    int age =scanner.nextInt();
    try{
        t1(age);
        。。。。
    }catch(NullPointerException e){
        //根据空指针异常情况来处理异常
    }catch(ArrayIndexOutOfBoundsException e){
        //根据数组下标越界异常情况来处理异常
    }catch(AgeOutOfboundsException e){
        //根据年龄越界异常情况处理异常
    }
}

注意:如果多个catch处理的异常对象存在继承关系

要求对父类异常情况的处理必须在catch、列表的后面

try{
    
}catch(NullPointerException e){
    
}catch(Exception e){
    
}

在try和catch的后面,可以跟有finally{}块,作为try和catch的统一出口

如果有一段代码,在try中也要执行,在catch也要执行,就可以将其写在finally中。

try{
    a
    b
    c
        
}catch(){
    a1
    a2
    a3
    dddd
}finally{
    dddd
}

注意 try-catch-finally组合

  • try-catch-finally可以通过使用,按照上述的顺序

  • try的后面可以没有catch,但需要紧跟finally
try{
    
}finally{}

try-catch不能单独存在,catch必须跟在try的后面

  • 一旦有finally,无论执行try,还是执行catch,finally中代码一定执行。哪怕try和catch中有
return

try{
    return 10 ;
}catch(){
    return 20 ;
}finally{
    System.out.println("--------------------------");
}

如果try,catch和finally中都有return,最终返回的finally中的值。

try{
    return 10 ;
}catch(){
    return 20 ;
}finally{
    return ;
}

5 受检异常与非受检异常

  • 所有继承RuntimeException的类,都称为非受检异常

    在编码时,对可能产生异常的代码不必须提前做处理或声明,但可以做处理或声明

  • 其余的异常类,都称为受检异常,要求在编码的时候:

    1. 如果方法能处理异常,必须对可能产生异常的代码提前做try-catch处理

    2. 如果方法不能处理异常,会抛给调用者,由调用者处理,就需要调用者提前try-catch处理,当前方法需要使用throws关键字声明(告诉调用者),当前方法有可能产生一个无法处理的受检异常,你的try-catch

    3. FileNotFoundException就是一个受检异常

    public void t1(){
        t3();
        
        try{
            t2();
        }catch(FileNotFoundException e){
            
        }
        
    }
    ​
    public void t2()throws FileNotFoundException{
        new FileInputStream("c:/z/1.txt");
    }
    ​
    public void t3(){
        try{
            //这可能会抛出一个FileNotFoundException 受检异常
        }catch(FileNotFoundException e){}
    }

注意

  • 一个方法可以使用throws声明多个受检异常,使用逗号隔开

public void t1()throws Exception1 , Exception2 , ...{}

那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值