目录

一、异常的概念;

二、异常的分类;

三、异常处理;

四、自定义异常;



一、异常的概念;

        1、生活中的异常:例如小王每日开车上班,耗时大概30分钟,但是生活中异常时常发生,例如发生堵车或撞车的情况,这些都需要我们人为的去解决;(文章底部附源代码)

        2、程序中的异常:

public class Test1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int num1 = in.nextInt();
        System.out.print("请输入除数:");
        int num2 = in.nextInt();
        System.out.println(String.format("%d / %d = %d",num1, num2, num1/ num2));
        System.out.println("感谢使用本程序!");
    } 
}

这个程序运行时会出现除数为零的情况,可是在数学逻辑当中除数不能为零,所以会出现代码执行异常的结果;那么如何解决问题呢?我们试着通过if-else来解决异常问题

package Exception.text;

import java.util.Scanner;

/**
 * @Author: ASUS
 * @Data: 2022/4/27 17:06
 * @Version: 1.0
 * @Description: IDEAHomeWork
 */
public class Test2 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int num1 = in.nextInt();
        System.out.print("请输入除数:");
        int num2 = 0;
        if (in.hasNextInt()){//如果输入的除数是整数
            num2 = in.nextInt();
            if (0 == num2){//如果输入的除数是0
                System.out.println("输入的除数是0。程序退出");
                System.exit(1);
            }
        }else {//如果输入的除数不是整数
            System.out.println("输入的数不是整数,程序退出");
            System.exit(1);
        }
        System.out.println(String.format("%d / %d = %d",num1, num2, num1/ num2));
        System.out.println("感谢使用本程序!");
    }
}

但是,通过使用if-else有很多的弊端:1、代码臃肿;2、程序员要花很大精力堵漏洞;3、程序员很难堵住所有漏洞;

因此需要使用到我们Java中的异常处理机制;

在我们现实生活中,根据不同的异常进行相应的处理,而不会就此中断我们的生活;

二、异常的分类;

        1、常见的异常类型

异常类型

说明

Exception

异常层次结构的父类

ArithmeticException

算术错误情形,如以零作除数

ArrayIndexOutOfBoundsException

数组下标越界

NullPointerException

尝试访问null对象成员

ClassNotFoundException

不能加载所需的类

legaArgumentEception

方法接收到非法参数

ClassCastException

对象强制类型转换出错

NumberFormatException

数字格式转换异常如把“abc”转换成数字

三、异常处理;

        1、什么是异常处理;

                ~Java编程语言使用异常处理机制为程序提供了处理错误的能力

                程序中预先设置好对付异常的处理方法---程序运行--->异常---对异常进行处理--->处理完                  毕,程序继续运行------>

        2、Java中如何进行异常处理;

                ·Java的异常处理是通过5个关键字来实现的:try,catch,finally,throw,throws

                ·捕获异常:

                        try:执行可能产生异常的代码

                        catch:捕获异常

                        finally:无论是否发生异常,代码总能执行

                ·声明异常:throws:声明方法可能要抛出的异常

                ·抛出异常:throw:手动抛出异常

        3、try-catch语句块:

public void method(){
        try {
            //代码段(此处不会产生异常)
        }catch (NumberFormatException){//异常类型+Exception
            //对异常进行处理的代码段
        }
        //代码段
    }

        

四、自定义异常;

        1、何时需要自定义异常

                ·当JDK中的异常类型不能满足程序的需要时,可以自定义异常类

                ·1、定义异常类--->2、编写构造方法,继承父类的实现--->3、实例化自定义异常对象                       --->4、使用throw抛出; 继承Exception或RuntimeException;

上机练习一:

package Work07;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Homework1 {
    public void test(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入课程代号(1~3之间的数字):");
        try {
            int i = scanner.nextInt();
            if (i == 1){
                System.out.println("java");
            }else if (i == 2){
                System.out.println("Mysql数据库");
            }else if (i == 3){
                System.out.println("HTML+CSS");
            }else {
                System.out.println("您输入的课程编号有误,请重新输入!");
            }
        }catch (InputMismatchException e) {
            System.out.println("输入参数不匹配!");
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            System.out.println("欢迎提出建议!");
        }
    }
    public static void main(String[] args) {
        Homework1 homework1 = new Homework1();
        homework1.test();
    }
}