• 异常处理


    结构体系

    Throwable 所有异常的父类,几乎所有的异常都定义在这个父类中,子孙类基本没有特有方法
    Error 错误:不能通过程序的方式解决,如内存溢出等严重错误
    Exception 编译异常,必须得处理,否则编译报错
    Runtimeexception 运行时异常,编译异常的子类,不强制处理,在运行时候可能报错

    异常默认处理方式

    1、在某个方法中,出现了和生活情况不同的数据时,没有必要继续往下执行,所以将这种情况封装成一个对象(异常对象)
    2、将这个异常对象(通过throw)抛出给调用者,一层一层向上抛出,一直到主方法中
    3、主方法也没有办法处理,抛出给jvm虚拟机
    4、Jvm虚拟机,就将异常对象中的所有信息,使用标准错误流进行打印(在eclipse显示红色),将jvm结束掉

    关键字

    throw

    主动抛出异常,在程序无法执行时,抛出异常,以便调用者进行下一步处理

    throws

    放在方法末尾,声明异常,作用是表示此方法不处理该异常,所声明的异常由调用者处理,如果一直抛到主方法都没有处理方法,就由jvm打印出异常信息

    finally

    无论怎样都会执行,就算try语句中要执行return语句也会先执行finally

    public class FinallyTest03 {
    public static void main(String[] args){
            int i = m1();
            System.out.println(i); 
        }
        public static int m1(){
            int i = 10;
            try{
                return i;
             //这里没有catch,所以不用在后面写return了
            }finally{
                i++;
                System.out.println("finally中的i=" + i); 
            }
        }
    }
    

    输出结果:.程序在执行到return i时,会先将i赋给一个临时变量,return的是这个临时变量:int temp = i;return temp;,然后再执行finally中的语句,打印出了11,之后再执行main方法中的语句,打印出10。

    catch

    可以捕捉多个异常,但是catch里面必须从小类型异常到大类型异常进行捕捉,先捕捉子后捕捉父,最多执行一个catch语句块里面的内容。
    jdk7新特性,可以将多个捕捉的异常放到一个catch里面catch (FileNotFoundException | ArithmeticException e)

    定义这么多异常子类,却又都没有特有方法的原因

    1.需要使用不同的异常名称,描述不同的异常情况,方便写程序的时候能很快找到错误原因
    2.如果有了不同的异常类型,可以在catch块中,根据不同异常类型,做不同的处理

  • 相关阅读:
    poj-1001 求高精度幂
    ECS训练营Day1—基于阿里云ECS、VuePress搭建静态网站
    阿里云免费领马克杯答案
    白盒测试之逻辑覆盖 简单易懂~
    如何合并多个PPT?
    failed to connect to gitee.com/github/gitlab port 443: timed out之类的错误
    解决 These dependencies were not found: * core-js/modules/es6.array.fill in xxx 之类的问题
    vue内嵌iframe跨域通信
    Luffy之课程详情页
    Flask之SQLAlchemy,flask_session以及蓝图
  • 原文地址:https://www.cnblogs.com/zhz-8919/p/10780013.html
Copyright © 2020-2023  润新知