异常以及处理方案 day15

/*
    异常:java程序编译或者运行时遇到的错误

    java中的异常分为3种:
    Throwable:
        Error: 错误
        Exception:
            编译时期异常(除了运行时期的异常全是编译时期异常)
            RuntimeException(运行时期异常)

Throwable中的方法
getMessage()                获取异常信息,返回字符串。
toString()                  获取异常类名和异常信息,返回字符串。
printStackTrace()            获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。最常用,显示的更明显
printStackTrace(PrintStream s)  通常用该方法将异常内容保存在日志文件中,以便查阅。

    举例,该例子仅上课使用,如现实生活遇到,概不负责。魏一民想要去大蜀山,骑哈罗电单车去,骑车骑到一半没电了(编译时期异常),应该是在出发
         前就应该检查的问题;骑车在大蜀山的路上,遇到了钉子,轮胎漏气了,这个是骑车的过程种遇到的问题(运行时期异常);大蜀山火山喷发了,
         挡住了前进的路,这个问题就属于非常严重的问题(Error)。

    java遇到程序遇到问题时,默认的处理方案是:结束java进程,报错。

如何处理异常

原则:
    如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
区别:
    后续程序需要继续运行就try
    后续程序不需要继续运行就throws
举例:
    感冒了就自己吃点药就好了,try
    吃了好几天药都没好结果得了新冠,那就的得throws到医院
    如果医院没有特效药就变成Error了


 */
/*
    异常的处理方案:
        1、try...catch...finally
        2、throws

    方案1:
        try{
            可能会出错的代码;
        }catch(异常类 参数){
            处理的方案逻辑;
        }finally{
            一般是释放资源的代码
        }

    try..catch..注意事项:
        1、try中定义变量作用域就在try种使用
        2、若try中代码没有异常,是不会匹配catch的
        3、catch若没有try出现的异常类型的话,就会使用java默认处理异常方案
        4、catch可以写多个,也可写一个,但是若多个catch存在继承关系的话,将父亲放在儿子的后面
        5、若使用jdk1.8新特性写法,使用一个catch接收多个异常类的话,不允许出现父子关系异常
 */
package com.shujia.day15;

public class ExceptionDemo3 {
    public static void main(String[] args) {
        try {
            int a = 10;
            System.out.println(a / 2);  // new ArithmeticException()
        } catch (ArithmeticException e) {// ArithmeticException e = new ArithmeticException()
//            System.out.println(e.getMessage());
//            System.out.println(e.toString());
            e.printStackTrace();
        }finally { // 无论try中的代码是否出现问题,这里的代码都会执行
            //一般情况下,finally里面写释放资源的代码
            System.out.println("好好学习,天天向上!");
        }

        System.out.println("hello world");
        System.out.println("魏一民真帅!");
    }
}
package com.shujia.day15;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

/*
    异常处理的第二种方案:throws      实际上并没有处理类似于甩锅,抛出异常给调用者

    在方法的定义小括号后面加异常类名。可以同时抛出多个异常类,表示该方法可能会出现某个异常,表示可能性


    throw关键字,在方法内部使用,后面跟着是一个具体的异常对象,表示一定会发生某个异常


    举例,该故事纯属虚拟,仅供上课案例。徐思远是一个快乐的小矿工,有一天,正常挖矿(java程序运行),突然挖到一颗远古炸弹(遇到了异常)
    ,开始将炸弹往洞口传递(throw),到了洞口给到了矿场管理者,管理者引爆了炸弹(try..catch)。

    throws抛出的若是编译时期异常,调用者必须要进行处理,否则程序无法通过遍历。
    若抛出的是运行时期异常,可以不处理,可以运行

 */
public class ExceptionDemo4 {
    public static void main(String[] args){

//        try {
//            fun1();
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//
//        System.out.println("oveer");

//        fun1();

//        try {
//            fun2();
//        }catch (Exception e){
//            e.printStackTrace();
//        }

        fun1();


//        fun2();


    }

    public static void fun2() throws FileNotFoundException {
        FileInputStream fis = new FileInputStream("xxx");
    }

    public static void fun1() throws ArrayIndexOutOfBoundsException{
        int[] arr = {1, 2, 3, 4};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要查询的索引:");
        int index = sc.nextInt();
        if (index >= 0 && index <= arr.length - 1) {
            System.out.println(arr[2]);
        } else {
            throw new ArrayIndexOutOfBoundsException();
        }


        System.out.println("hello world");
    }
}
posted @ 2024-08-14 16:20  ていせい  阅读(4)  评论(0编辑  收藏  举报