2022-07-29 第二小组 张鑫 学习笔记

实训二十一天 异常处理

1.学习重点

1.异常处理

2.异常体系结构

2.学习心得

今天主要学习了异常处理相关的知识,晚上做的案例太综合了
心态有点崩。。。

3.学习内容

异常处理

1.下标越界
2.空指针
3.类型转换异常
4.数字格式化
5.算数异常(数学异常)

编程界
1.除数为0
2.输入输出流(IO流),没有关闭
3.停电
当一个程序抛出异常时,抛异常后面的语句不再执行,类似于return的功能,终止方法的执行


异常的继承体系结构

最顶级的Throwable
Error(错误):正常情况下,不太可能出现。绝大多数错误都会导致程序处于非正常的状态下,很难恢复
            外力作用下,不考虑
            ErrorThrowable的子类。它是在Java程序处理范围之外的
Exception(异常):Java语言中,将程序执行中发生的不正常的情况称之为异常
                 编译期异常:写代码的时候,抛异常,如果编译器不解决,会编译不通过,一直报红
                 运行期异常:RuntimeException:运行时会抛出异常,平时没事
自定义异常:
        Java中异常机制很完善,但结合实际业务还是差很多
        怎么自定义异常
        1.所有异常必须是Throwable的子类(大材小用,没必要)
        2.如果要定义一个编译期异常,需要继承Exception3.如果要定义一个运行期异常,需要继承RuntimeException类
        
        在一个语句块中,如果使用throw抛出一个编译期异常,就必须在方法的声明处使用throws关键字类标记异常类型
还有一种处理方式,直接try..catch

我们为什么要手动的抛异常
配合全局异常处理机制来解决问题

throw语句可以当作方法的返回值
在一个有返回值的方法中,如果有条件分支,一定要保证每种情况下都有返回值,哪怕是抛异常。
开发中,大部分情况下使用的都是运行期异常


异常链

一个异常被抛出后会继续被调用这个方法的方法捕获或抛出,异常会扩散
只要解决异常,处理异常,就是try...catch

如果一个方法没有捕获一个编译期异常,该方法必须使用throws声明
throws并不是真正的解决了异常,只是把异常抛给了下一级调用者
service层,干脏活累活的


finally关键字

finally关键字用来创建在try代码块后面执行的代码块
无论是否发生异常,finally代码块中的一定会执行,一般finally中的代码都是用来释放资源
try...catch...finally

catch可以写多个,有顺序
先写小的,后写大的

方法的重写
重写的方法不能抛出比被重写方法更大的异常类型


//编译器异常
public class MyException extends Exception{
    public MyException(String message) {
        super(message);
    }
}

//运行期异常
public class MyRuntime extends RuntimeException{

    public MyRuntime(String message) {
        super(message);
    }
}

try..catch..finally执行顺序
finally永远最后执行

public class Question01 {
    public static int test1(){
        int i =10;
        try {
            i++;
            System.out.println("try:"+i);
        }catch (Exception e){
            i--;
            System.out.println("catch:"+i);
        }finally {
            i=100;
            System.out.println("finally:"+i);
        }
        return i;
    }
    public static int test2(){
        int i =10;
        try {
            i++;
            System.out.println("try:"+i);
            throw new RuntimeException();
        }catch (Exception e){
            i--;
            System.out.println("catch:"+i);
        }finally {
            i=100;
            System.out.println("finally:"+i);
        }
        return i;
    }
    public static int test3(){
        int i =10;
        try {
            i++;
            System.out.println("try:"+i);
            return i;
        }catch (Exception e){
            i--;
            System.out.println("catch:"+i);
            return i;
        }finally {
            i=100;
            System.out.println("finally:"+i);
        }
    }

    public static int test4(){
        int i =10;
        try {
            i++;
            System.out.println("try:"+i);
            return i;
        }catch (Exception e){
            i--;
            System.out.println("catch:"+i);
            return i;
        }finally {
            i=100;
            System.out.println("finally:"+i);
            return i;
        }
    }

    public static void main(String[] args) {
        System.out.println(test3());
    }
}
posted @   菜鸡成长记  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示