java-异常处理

异常的定义
  • 异常是在程序中导致程序中断运行的一种指令
  • 异常指的是Exception,其父类是Throwable(可能的抛出)
  • Throwable存在两个子类
    • Error,是 JVM 发出的错误操作,只能尽量避免,无法用代码处理
    • Exception:一般表示程序中的错误,在程序中一般用try…catch处理
RuntimeExcepion与Exception的区别
注意观察如下方法的源码: 

Integer类: public static int parseInt(String text)throws NumberFormatException 

此方法抛出了异常, 但是使用时却不需要进行try。。。catch捕获处理,原因: 

因为NumberFormatException并不是Exception的直接子类,而是RuntimeException的子类,只要是 

RuntimeException的子类,则表示程序在操作的时候可以不必使用try…catch进行处理,如果有异常发生,则由JVM进 行处理。当然,也可以通过try catch处理。
<br>
处理异常
try{
    // 有可能发生异常的代码段
}catch(异常类型1 对象名1){ 
    // 异常的处理操作 
}catch(异常类型2 对象名2){  
	// 异常的处理操作 
} ... 
finally{ 
	// 异常的统一出口 
}
  • finally语句:在进行异常的处理之后,此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。

    在这里插入图片描述

  • 多异常捕获的注意点:

    • 捕获范围更大的异常不能放在捕获范围较小的异常之前。
    • 如果为了方便,则可以将所有的异常都使用Exception进行捕获。
try + catch的处理流程
  1. 一旦产生异常,则系统会自动产生一个异常类的实例化对象。
  2. 如果异常发生在try语句,则会自动找到匹配的catch语句执行,所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理,如果没有在try语句中,则会将异 常抛出。

finally 常考面试题
     public static void main(String[] args) {
            int b = haha();
            System.out.println(b);
        }
        public static int haha(){
            int a =10;
            try{
                return a ;
            }catch (Exception e){
                return 0;
            }
            finally {
                a = 200;
            }
        }
       
    
    //结果为10
    //why: 基本数据类型
    //先将 a = 10 入栈,执行return a 的时候是直接复制的 a 的值为10
    //执行finally语句的时候,是将栈中的 a 的值直接改为 200;但是我们备份出来的仍为10


    public class demo3 {
        public static void main(String[] args) {
           Person p = haha();
            System.out.println(p.age);
        }
        public static Person haha(){
            Person p = new Person();
            try{
                p.age =18;
                return p;
            }catch (Exception e){
                return p;
            }finally {
                p.age = 28;
            }
        }
    }
    
     class Person{
        int age;
    }

    //结果为28
    //考察内容为 引用数据类型
    //当return正在准备返回的时候,执行finally中的内容,p.age = 28;
    //因为类型是对象,引用数据类型,在栈中存放的是地址 (Person p = newPerson()的地址);修改 p.age时先找到堆中的地址,修改 age 的值。所以显示的是修改后的值

在这里插入图片描述

throws关键字
  • 随异常一起的还有一个称为throws关键字,此关键字主要在方法的声明上使用,表示方法中不处理异常,而交给调用处处理。
    格式:

    返回值 方法名称()throws Exception{ 
    
    }
    
throw关键字
  • throw关键字表示在程序中人为的抛出一个异常(即JVM 不会将某些在现实生活中不合理的事情 视为异常,所以程序员 人为编写代码)。
  • 因为从异常处理机制来看,所有的异常一旦产生之后,实际上抛出 的就是一个异常类的实例化对象,那么此对象也可以由throw直接抛出
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小白小小白小白鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值