lyt0612

导航

2022-07-29 第二组 刘禹彤 学习笔记

2022-07-29 第二组 刘禹彤 学习笔记

打卡第19天

今天学习了异常处理

 

 

###学习笔记

1.异常处理

1.下标越界

2.空指针

3.类型转换异常

4.数字格式化

5.算数异常(数学异常)

编程界:1.除数为零

2.IO流,没有关闭

3.停电

  • 当一个程序抛出异常时,抛异常后面的语句不再执行,类似于return的功能,终止方法的执行
  • catch可以写多个,有顺序问题。先写小的,再写大的

2.异常的继承体系结构

  • 最顶级的Throwable:错误,异常
  • Error:正常情况下不太可能出现,绝大多数Error都会导致程序处于一个非正常的状态下,很难恢

复,外力的作用下,不考虑

Error是Throwable的子类,他是在Java程序处理范围之外的

  • Exception:在java语言中,,将程序执行中发生的不正常情况称之为异常,

Exception是Throwable的子类

1.编译期异常:写代码的时候抛异常,如果编译器不解决,会编译不通过,一直报红

2.运行期异常:RuntimeException,运行时会抛异常,平时没有事

  • 自定义异常:java中异常机制,结合实际业务

怎么定义异常:1.所有的异常必须是Throwable的子类(大材小用,没必要)

2.如果要定义一个编译器异常,需要继承exception类

3.如果要定义一个运行期异常,需要继承RuntimeException类

在一个语句块中,如果使用throw抛出一个编译器异常,就必须在方法的声明处使用throws关键字来标记异常

还有一种处理方式:try......catch

为什么要手动抛异常:因为要配合全局异常机制来处理问题

throw语句可以当作方法的返回值

在一个有返回值的方法中,如果有条件分支,必须保证每个分支都有返回值,哪怕是抛异常

开发中,大部分使用的都是运行期异常

3.异常链

  • 一个异常被抛出去之后会继续被调用这个方法的方法捕获或抛出,异常会扩散
  • 只要说处理异常,解决异常,捕获异常-----------(try.......catch)
  • throw并不是真正的解决了异常,只是把异常抛给了下一级调用者
  • 如果一个方法没有捕获一个编译器异常,该方法必须使用throws来声明
  • throws出现在什么地方?

方法的声明处,抛出多个异常,用逗号隔开

4.finally关键字

  • finally用来创建在try代码块后面执行的代码块中的代码一定会执行,一般finally中的代码是用来释放空间的
  • 无论是否发生异常,finally代码块的代码一定会执行
  • 一般finally中的代码都是用来释放空间的 除了让所有的程序强制退出的System.exits(-1)的语句
  • 一般模式:try....catch...finally

 

###学习心得

今天学习了异常处理以及他的体系结构,上课掌握的情况还不错,课上的练习也有编写的思路,要把之前学习的知识进行巩固

###掌握情况:良好

###课上练习

public class Ch03 {
    public static void fun(int i, int j)throws MyException{
        if (j == 0){
            throw new MyException("除数不为零");
        }
        System.out.println(i/j);
    }

    public static void main(String[] args) {
        try {
            fun(1,0);
        }catch (MyException e){
            //打印异常信息
            e.printStackTrace();
        }

    }
}

###运行结果

 

 

 

posted on 2022-07-29 18:56  小仙女吖~  阅读(19)  评论(0编辑  收藏  举报