HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
随笔
关于作者
  • 《PureJavaCoderRoad》

    • 导读

    • Java基础

      • Java入门

      • Java语法

      • Java流程控制

      • 面向对象

      • 异常处理

        • 1、Java异常
        • 2、异常处理
        • 3、自定义异常
    • Java进阶

    • Java高阶

    • 开发辅助工具

    • 计算机网络

    • 数据库

    • JavaEE

    • 中间件

    • 架构

    • 建议

  • PureJavaCoderRoad
  • Java基础
  • 异常处理
#自定义异常
码农阿雨
2022-05-26
目录

3、自定义异常

# 自定义异常

在业务代码中,有时候需要自定义异常,异常的返回结果可以根据业务进行调整。

自定义异常的时候,尽量使用JDK已定义的异常类型,比如以下常见的异常类:

Exception
├─ RuntimeException
│  ├─ NullPointerException
│  ├─ IndexOutOfBoundsException
│  ├─ SecurityException
│  └─ IllegalArgumentException
│     └─ NumberFormatException
├─ IOException
│  ├─ UnsupportedCharsetException
│  ├─ FileNotFoundException
│  └─ SocketException
├─ ParseException
├─ GeneralSecurityException
├─ SQLException
└─ TimeoutException

eg:

五菱宏光厂商为了能快速为用户定位更换轮胎的错误,于是加入了错误码,通过错误码就能立即知道错误原因了。

对于代码实现就是自定义了一个ChangeWeelException 异常类,继承于RuntimeException。

class ChangeWeelException extends RuntimeException {
    private int errorCode;
    private String errorMessage;

    ChangeWeelException(int errorCode, String errorMessage) {
        this.errorCode = errorCode; //自定义构造函数,加入错误码字段
        this.errorMessage = errorMessage;
    }
    public int getErrorCode() {
        return errorCode;
    }
    public String getErrorMessage() {
        return errorMessage;
    }
}

public class WuLingHongGuang {
    private String[] weels = {"左1", "左2", "后1", "后2", "备胎1"};

    void changeWeel(int index, String weelName) throws ChangeWeelException { //throws 关键字,表示方法可能会抛出异常
        if (index > weels.length) {
            throw new ChangeWeelException(50001, "ERROR!!!轮胎安装位置错误了!"); //throw 关键字,直接抛出异常
        } else {
            weels[index] = weelName;
        }
    }
}

class HaC {
    public static void main(String[] args) {
        WuLingHongGuang wuLingHongGuang = new WuLingHongGuang();
        try {
            wuLingHongGuang.changeWeel(10, "备胎2"); //捕获异常
            System.out.println("更换成功"); //报错并不会执行
        } catch (ChangeWeelException e) {
            e.printStackTrace();
            System.out.println("错误码:" + e.getErrorCode());
            System.out.println("错误提示:" + e.getErrorMessage());
        } finally {
            System.out.println("更换完毕...");
        }
    }
}

输出:

com.hac.异常.ChangeWeelException
	at com.hac.异常.WuLingHongGuang.changeWeel(WuLingHongGuang.java:33)
	at com.hac.异常.HaC.main(WuLingHongGuang.java:49)
错误码:50001
错误提示:ERROR!!!轮胎安装位置错误了!
更换完毕...

# 断言

另外还有个知识点就是断言。(了解即可)

断言:也就是所谓的assertion,是jdk1.4后加入的新功能。

它主要使用在代码开发和测试时期,用于对某些关键数据的判断,如果这个关键数据不是你程序所预期的数据,程序就提出警告或退出。

当项目正式发布后(上线),可以取消断言部分的代码。java中使用assert作为断言的一个关键字,这就可以看出java对断言还是很重视的,因为如果不是很重要的话,直接开发个类就可以了,没必要新定义一个关键字。

语法1:

assert expression;        //expression代表一个布尔类型的表达式,如果为真,就继续正常运行,如果为假,程序退出

语法2:

assert expression1 : expression2;          
//expression1是一个布尔表达式,expression2是一个基本类型或者Object类型,
//如果expression1为真,则程序忽略expression2继续运行;如果expression1为假,则运行expression2,然后退出程序。

应用举例1:

public class AssertionDemo {  
    //这个成员变量的值可以变,但最终必须还是回到原值5  
    static int i = 5;  
    public static void main(String[] args) {  
        assert i==6;  
        System.out.println("如果断言正常,我就被打印");  
    }  
}

输出:

# 总结:

在自定义异常的时候,一般都是从RuntimeException派生出子异常,在自定义异常的时候,可以根据业务定义多种构造方法。

但是在实际的业务中,e.printStackTrace();可能会抛出很长的一段错误日志,这样会欲盖弥彰,如何打印错误日志,也是开发人员需要考虑。

在日志框架中,我们还可以使用Log4j、Sl4j 这些第三方API 库,而不是使用System.out.println()打印。

总结这三节有关异常的知识点:

阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#自定义异常
上次更新: 2025-02-21 06:04:57
最近更新
01
《LeetCode 101》
02-21
02
IDEA、Golang、Pycharm破解安装
02-21
03
《LeetCode CookBook》
02-21
更多文章>
Theme by Vdoing | Copyright © 2020-2025 码农阿雨
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式