JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

简介: JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间过得很快,转眼一个月就这样过去了,我们不多说,继续我们的JAVA之旅一.

JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别


不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间过得很快,转眼一个月就这样过去了,我们不多说,继续我们的JAVA之旅

一.异常的概述

异常算是程序中一个比较重要的环节了,我们首先来看一下异常的体系,我们举一个小例子,定义一个除法方法

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {

        Demo d = new Demo();
        System.out.println(d.div(6, 2));
    }
}

class Demo {
    /**
     * 定义一个除法
     * 
     * @param a
     * @param b
     * @return
     */
    int div(int a, int b) {

        return a / b;
    }
}
AI 代码解读

这段程序很好理解吧,就是除嘛,传6和2进去,的出来的结果肯定是3呀,但是,我现在传一个4和0,那输出的结果又会是什么呢?

这里写图片描述

OK,异常出现了

  • 异常:就是程序在运行时出现的不正常情况

异常的由来

  • 问题也是现实生活中一个具体的事物,也可以通过JAVA的类的形式进行描述,并封装成对象,其实就是JAVA对不正常情况进行描述后的对象体现

  • 对于问题的划分,分为两种,一种是严重问题,一种是非严重问题,对于严重的问题JAVA通过ERROR类描述,非严重的,用Exception类来进行描述

  • 对于ERROR,一般不编写针对性的代码进行描述

  • 对于Exception可以通过正对性的处理方式进行处理

无论ERROR还是Exception,都具备一些共性的内容,比如:不正常情况的信息,引发原因等

  • Throwable
    • Error
    • Exception

这里写图片描述

Error的错误很多,你基本上很多都可以根据名字追到是什么错误

这里写图片描述

但是我们今天不讲Error,我们看的是异常

这里写图片描述

二.Try-Catch

Try-Catch就是抛出异常,也就是异常的处理

    try {
            //需要被检测的代码
        } catch (Exception e) {
            // 处理异常的代码(处理方式)
        }
AI 代码解读

既然知道了处理方式,那我们就可以针对上面的异常进行处理了

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {

        Demo d = new Demo();
        try {
            System.out.println(d.div(4, 2));
        } catch (Exception e) {
            System.out.println("异常");
        }

    }
}

class Demo {
    /**
     * 定义一个除法
     * 
     * @param a
     * @param b
     * @return
     */
    int div(int a, int b) {

        return a / b;
    }
}
AI 代码解读

对捕获的异常对象进项常见的处理方法

  • getMessage() 错误信息
  • toString() 转换成string的异常信息
  • printStackTrace 打印内存中的跟踪信息

三.异常声明Throws

我们不确定这段代码有没有问题,那我们就得去标识,怎么标识?Throws

/**
     * 定义一个除法
     * 
     * @param a
     * @param b
     * @return
     */
    int div(int a, int b) throws Exception{

        return a / b;
    }
AI 代码解读

在功能上通过throws的关键字来声明了该功能有可能会出现问题,所以我们使用的时候就会有提示;

这里写图片描述

你不处理我就不让你用,提高了安全性

三.多异常处理

对多异常的处理方式是怎么样的呢?

  • 1.声明异常时,建议声明更为具体的异常,这样处理的可以更加具体
  • 2对方声明几个异常,就对应有几个catch块,如果多个catch块中的异常出现继承关系,父类异常catch放在最下面,不要定义多余的catch块
  • 3.建议在进行catch处理时,catch钟一定要定义具体处理方式,不要简单的定义一句显示格式

标准格式

    try {

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NullPointerException e) {

        }
AI 代码解读

也就是多catch

四.自定义异常

我们知道,异常分很多种,我们也可以自定义异常,也就是自己定义一些规则,因为项目中会出现一些特有的异常,而这些问题并未被JAV封装成异常,针对这些问题,我们可以按照JAVA对问题封装的思想,将特有的问题进行自定义的异常封装

如何去自定义异常?

需求,在本程序中,对于出书是-1?也视为是错误的,是无法进行运算的,那么就需要对这个问题进行自定义的描述

当在函数内部出现throw抛出异常对象,那么必须要给对应的处理动作

要么在函数上声明让调用者处理

throw关键字自定义异常,一般情况下,函数内出现异常,却没有需要声明,发现打印的就黑锅只有异常的名称,却没有信息,因为自定义的异常并未定义的信息

如何定义异常信息

//公共的   类   类名
public class HelloJJAVA {
    // 公共的 静态 无返回值 main方法 数组
    public static void main(String[] str) {
        Demo d = new Demo();
        try {
            d.dev(4, -1);
        } catch (FushuException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

/**
 * 负数异常
 * 
 * @author LGL
 *
 */
class FushuException extends Exception {

    private String msg;

    public FushuException(String msg) {
        this.msg = msg;
    }

    @Override
    public String getMessage() {
        // TODO Auto-generated method stub
        return msg;
    }
}

class Demo {
    int dev(int a, int b) throws FushuException {
        if (b < 0) {
            // 手动通过throw关键字抛出自定义异常对象
            throw new FushuException("出现了除数是负数的异常");
        }
        return a / b;
    }
}
AI 代码解读

这段代码挺好玩的

这里写图片描述

但是其实我们有一点是不知道的,这个其实父类已经完成了,所以子类只要构造时,将构造信息传递给父类就行了,用super,那么就可以直接通过getMessage()方法来获取自定义的异常信息了

/**
 * 负数异常
 * 
 * @author LGL
 *
 */
class FushuException extends Exception {

    private String msg;

    public FushuException(String msg) {

        super(msg);
    }

}
AI 代码解读

五.Throw和Throws的区别

我们来一个小插曲,就是异常的两个类的区别

Throw和Throws的区别

  • 1.Throws使用在函数上,Throw使用在函数内
  • 2.Throws后面跟异常类,可以跟多个,用逗号区别,Throw后面跟的是异常对象

OK,我们本篇幅就先到这里,异常的内容还是有很多的,不出意外我们下篇还是讲异常,大家感兴趣的话,可以加群:555974449

相关文章
|
5月前
|
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
171 1
|
5月前
|
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
83 1
|
6月前
|
让星星⭐月亮告诉你,自定义定时器和Java自带原生定时器
定时器是一种可以设置多个具有不同执行时间和间隔的任务的工具。本文介绍了定时器的基本概念、如何自定义实现一个定时器,以及Java原生定时器的使用方法,包括定义定时任务接口、实现任务、定义任务处理线程和使用Java的`Timer`与`TimerTask`类来管理和执行定时任务。
175 3
|
4月前
|
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
170 34
Java 中的异常处理:不仅仅是 try-catch
在Java的世界里,异常处理是代码的守护神,它保护着程序不会因为意外错误而崩溃。但异常处理远不止try-catch那么简单。本文将深入探讨Java的异常处理机制,从基本的try-catch到更复杂的自定义异常和finally块的使用,带你理解如何在Java中优雅地处理错误。
79 1
深入探讨:try-catch对Java性能的影响
在Java编程中,异常处理是一个不可或缺的部分。使用`try-catch`块可以捕获和处理异常,防止程序崩溃。然而,关于`try-catch`对性能的影响,开发者们持有不同的观点。本文将深入探讨`try-catch`对Java程序性能的影响,并提供一些最佳实践。
88 5
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
165 14
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
147 2
|
6月前
|
Java中的try-catch
如何在Java中用try-catch优雅地处理异常
100 2
Java中的try-catch
Java中的异常处理:不仅仅是try-catch
【10月更文挑战第20天】在Java的世界里,异常处理是构建健壮应用程序不可或缺的一部分。它不仅仅是关于try-catch语句的简单使用,而是一种确保程序在遇到不可预测的错误时能够优雅地恢复或终止的机制。本文将深入探讨Java异常处理的核心概念,并通过实际代码示例展示如何有效地管理和处理异常。我们将从基础的try-catch块开始,逐步过渡到更复杂的异常处理策略,包括finally块的使用、自定义异常类的创建以及异常链的应用。准备好让你的Java异常处理技能升级吧!
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等