###学习心得###

                              今天学习的是异常处理,明白了什么是抛出异常,原来异常还可以自己定义,异常情况有两种,编译期异常 运行期异常

                                                                      ###心情###

                                                          感觉听明白了,但是有的时候要想好久异常该怎么改,怎么调用,怎么声明异常

--------------------------------------------------------------------------------------------------------------------------------------------------------------

*  异常处理
* 1.下标越界
* 2.空指针
* 3.类型转换异常
* 4.数字格式化
* 5.算术异常(数学异常)
*
* 编程界:
* 1.除数为零
* 2.IO流,没有关闭
* 3.停电
*
* 当一个程序抛出异常时,抛出异常的语句后面的语句不再执行,类似于return的功能
* 终止方法的执行
*  异常的继承体系结构
* 最顶级的Throwable:错误异常
* Error:正常情况下,一般不会出现,绝大多数情况下都会导致程序处于非正常状态下,很难恢复。外力的作用下,不考虑。
* Error是Thorwable的子类,它是在Java程序处理范围之外的。
* Exception:Java语言中,将程序执行中发生的不正常的情况称之为异常。
* 编译期异常:写代码时候抛出异常,如果编译期没解决,会一直不通过,一直报红
* 运行期异常:RuntimeExpection,运行时抛出异常,平时没事

* 自定义异常:
* Java中异常机制,但是结合实际业务
* 怎么自己定义异常?
* 1.所有异常必须是throwable的的子类,(大材小用没必要)
* 2.如果要定义一个编译期异常,需要继承Expection类
* 3.如果定义一个运行期异常,需要继承RuntimeExpection类
public class Ch02 {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 0;
        try {//把有可能出异常的代码放到try语句块里
            System.out.println(num1 / num2);
        }catch (Exception e) {
            System.out.println("除数不能为零");
            e.printStackTrace();
        }
        System.out.println("我很重要...");
    }
}
*   在一个语句块中如果使用throw抛出编译期异常必须在方法的声明的后面加上throws关键字来标识
* 或者直接 try catch
* 为什么要手动抛出异常?
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();
    }
        System.out.println("异常");
    }
}
*  throw语句是可以当作方法的返回值的
* 在一个有返回值的方法中如果有分支,一定保证每种条件都有返回值
import java.util.Objects;

public class Ch04 {
    public static String show(String str){
        if (Objects.isNull(str)){
            return str.concat("hello");
        }
        throw new RuntimeException("参数不能是空");
    }

    public static void main(String[] args) {
        show("null");
    }
}
* 如果一个方法没有捕获一个编译期异常,该方法必须使用throws来声明。
* throws并不是真正的解决了异常,只是把异常抛给了下一级调用者。
* 面试题:
* throws和throw区别!!!
* throws出现在什么地方?
* 方法的声明处,抛出多个异常,用逗号隔开。
public class Ch06 {

    public void show() throws MyException,RuntimeException,NullPointerException,IndexOutOfBoundsException {

    }

    public void info() throws MyException {
        show();
    }

    // JVM
    public static void main(String[] args) {
        try {
            new Ch06().info();
        } catch (MyException e) {
            throw new RuntimeException(e);
        }
    }
}
 * finally关键字
* finally用来创建在try代码块后面执行的代码块
* 无论是否发生异常,finally代码块中的代码一定会执行。一般finally中的代码都是用来释放资源。
* try...catch...finally:
public class Ch07 {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 2;
        String str = null;
        try {
            System.out.println(num1 / num2);
            System.out.println(str.length());
//            main(args);
        }finally{
            System.out.println("finally...");
        }
    }
}
 * catch可以写多个,有顺序问题。
* 先写小的,再写大的
public class Ch08 {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 0;
        try {
            System.out.println(num1 / num2);
            // 开发角度来说,应该写指定的。
        } catch (ArithmeticException e) {
//            e.printStackTrace();
            System.out.println("除数不能为0");
        } catch (Exception e){
            System.out.println("未知错误");
        }
    }
}

 



posted on 2022-07-29 20:32  骐琳  阅读(19)  评论(1编辑  收藏  举报

你点我就回上面去了ヾ(≧O≦)〃嗷~