异常的抛出和处理

653 未经授权,禁止转载了解课程
课程介绍
讨论{{interaction.discussNum ? '(' + interaction.discussNum + ')' : ''}}
适合人群
Java工程师,Java高级程序员,Java架构师
你将会学到
讲解异常的概念、分类、抛出和处理、finally块使用等。
课程简介

一、异常的概念

    全称异常事件,会中断正常执行流程
二、异常的分类
1)继承体系
java.lang.Throwable
    -java.lang.Exception(能处理)
        -java.lang.RuntimeException(运行时异常)
            -NullPointerException
            -ArithmeticException
            -ClassCastException
            -UnsupportedOperationException
            -IllegalArgumentException
            -IllegalStateException
            -...
        -非runtimeExption
            -ClassNotFoundException
            -InterruptedException
            -SQLException
            -IOException
            -FileNotFoundException
            -...
    -java.lang.Error(处理不了)
        -IOError
        -ThreadDeath
        -VirtualMachineError
            -InternalError
            -OutOfMemoryError
            -StackOverflowError
            -UnknownError
        -ClassFormatError
        -ExceptionInInitializerError
        -IncompatibleClassChangeError
        -NoClassDefFoundError
        -...
2)checked异常和unchecked异常
checked异常(必须处理,否则无法通过编译)
    Throwable+Exception+非runtimeExecption及其子类
unchecked异常
    RuntimeException以及子类和Error及其子类

三、自定义异常
系统内置的异常类型不够用,需要自定义异常
编写java类继承任意异常类即可
    如果继承的是RuntimeException,那么自定义的异常就是RuntimeExption
    如果继承的Error,那么自定义异常就是Error
注:异常类也是一个普通的java类,可以定义成员变量和方法之类的


四、异常的处理
1)捕获后处理
    关键字 try-catch
    try{
        //可能出异常的代码块
    }catch(异常类型1){

    }catch(异常类型2){

    }...
    从上到下依次匹配,找到匹配后执行对象代码块
catch中常见的处理方法
    a)输出异常信息
        e.printStackTrace();
    b)转换为其他异常再抛出
        try{
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    c)其他处理方式

2)不捕获,声明抛出
    在对应的方法上通过关键字throws声明要抛出的异常(让方法调用者处理)
    可声明多个


五、手动抛出异常对象
    当执行某个方法发生异常时,方法会收集异常信息,组装为一个异常对象交给JVM,称为抛出一个异常
    关键字 throw 其后必须跟上一个异常对象的引用
六、顶层类Throwable
构造器:
    Throwable(String message) //传入异常信息
    Throwable(String message, Throwable cause) //传入异常信息和实际底层异常
常用方法
    Throwable getCause();//获取底层异常
    String getMessage();//获取异常消息
    void printStackTrace();//在标准异常流程中输出异常栈信息  
    void printStackTrace(PrintStream s);//输出异常栈信息到s     
java.jpg

展开更多
发布
头像

{{ item.user.nick_name }} {{ EROLE_NAME[item.user.identity] }}

置顶笔记
讨论图
{{ item.create_time }}回复
  • 删除

    是否确认删除?

    确认
    取消
  • {{ item.is_top == 1 ? '取消置顶' : '置顶'}}

    已有置顶的讨论,是否替换已有的置顶?

    确认
    取消
{{ tag.text}}
头像
{{ subitem.user.nick_name }}{{ EROLE_NAME[subitem.user.identity] }}
{{ subitem.create_time }}回复
删除

是否确认删除?

确认
取消
发布
{{pageType === 'video' ? '讨论区抢占沙发,可获得双倍学分' :'讨论区空空如也,你来讲两句~'}}
发布
{{tips.text}}
{{ noteHeaderTitle }} 笔记{{ hasMyNote ? '我的笔记' : '记笔记' }}
{{ hasMyNote ? '我的笔记' : '记笔记' }}
优质笔记
更新于:{{ $dayjs.formate('YYYY-MM-DD HH:mm:ss', item.last_uptime*1000) }}
头像
{{ detail.username }}

公开笔记对他人可见,有机会被管理员评为“优质笔记”

{{ noteEditor.content.length }}/2000

公开笔记
保存
提问

讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。

记录时间点
记录提问时视频播放的时间点,便于后续查看
公开提问
提交