Java中如何认识异常以及处理异常

本文介绍了Java中的异常处理机制,包括异常的概念、分类、处理方式以及如何自定义异常。通过示例代码解释了如何处理算术异常、数组越界、空指针等问题,并展示了使用try-catch-finally语句块进行异常捕获和处理的方法。同时,文章还提供了一个自定义异常的案例,用于处理课程编号输入错误的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、异常的概念;

二、异常的分类;

三、异常处理

四、自定义异常;



一、异常的概念;

        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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值