Java抛出异常与自定义异常类应用示例

 更新时间:2019年03月14日 08:49:13   作者:水中鱼之1999  
这篇文章主要介绍了Java抛出异常与自定义异常类,结合实例形式分析了Java针对错误与异常处理的try、catch、throw等语句相关使用技巧,需要的朋友可以参考下

本文实例讲述了Java抛出异常与自定义异常类。分享给大家供大家参考,具体如下:

异常处理常用方法:

常用的异常处理方法有:

  • 一、try()catch() 语句
  • 二、throw / throws 语句
  • 三、自定义异常类

用途:

众所周知,当程序运行过程中,如果遇到了错误(比如数组下标越界,空指针等)程序就会自动终止,但这种错误一般是偶然的,可能是用户输入不呵呵程序编写者的意图导致,而不是程序本身问题,这是我们要做的,是让操作者知道发生了什么事情,而不是直截了当的结束程序,这时我们就用到了异常处理(语句发生错误时,只抛出异常,而不结束程序)。

这里一源码为例 详细介绍一下:

一、try()catch() 语句:

原理剖析:

将可能发生异常的语句放在 tr() 中,运行到try这一行时,如果无异常,则正常执行 try() 中语句,执行完 try() 内语句之后,程序自动跳过 catch() 语句,去执行 catch() 之后的语句。

反之,如果在执行 try() 内语句时,出现异常情况,则执行跳转到catch()语句中,进行异常处理,一处处以之后不再回到try的()内,而是结束try()catch()内的所有操作,去运行后面的catch语句后面的语句。

举个例子就明白了:

public class ClassText {
    public static void main(String[] args) {
        int textArray[] = new int[3];//用于测试数组越界异常的数组
        int j;//用来使数组月结的下标
        try {
            for ( j = 0; j < (textArray.length + 1); j++) {//有+1可见 该测试一定越界
                textArray[j] = (int) Math.random()*10 ;
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        System.out.println("但是上面抛出异常后\n程序并没有直接结束\n"
                + "而是跳出try()catch()语句\n正常执行本条输出语句");
    }
}

输出如下:

可以看到,发生异常后依然执行了后面的输出语句。

二、throw / throws 语句

很多出初学者一直把throw / throws 语句,看作两种不同的异常处理方法,其实他们可以看作一个整体,throw语句可以看作异常的处理语句,而throws我们则可以将其类比为‘extends' 它的主要作用是声明该方法(体内存在throw语句的方法,需要throws或者说我们可以看作需要‘继承/链接',该异常类型的原型),举个例子大家就明白了:

private static void textThrow_Throws(int radius) throws Exception {
    if ( radius < 0 ) {//如果半径小于0 则不符合常理进行异常处理
        throw new Exception();
    }
}

这样一来throw/throws 的用法就显而易见了。

但是在写完throw/throws 语句后,异常处理并没有结束,因为这里只是简单声明了,我的这个成员方法中的可能会抛出异常,并没有写具体该如何处理这个异常,所以这是在主函数中,就要用try()catch()将他们包围。描述好具体的处理异常方法:完整测试代码如下:

public class ClassText {
    public static void main(String[] args) {
        int radius ;//定义一个叫做搬进的变量作为测试
        radius = -5;//常理可知半径使正数
        try {
            textThrow_Throws(radius);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("程序正常结束~");
    }
    private static void textThrow_Throws(int radius) throws Exception {
        if ( radius < 0 ) {//如果半径小于0 则不符合常理进行异常处理
            throw new Exception();
        }
    }
}

我们再看看输出范例:

三、自定义异常类

自定义异常类是逃不开,也是新手接触最少的,其实它的基本使用方法还是很简单的,自定义异常处理类,只包括两部分:(1)、类的构造方法,构造方法的建立则非常简单,其实只要继承父类(比如 Exception类 )的构造方法即可。(2)、重写toString()函数,这是最重要的一点,再toString函数中,描述具体发生了什么错误导致了异常的抛出。这样一来用户才知道究竟是发生了什么错误

这里结合throw/throws 举个例子就很好明白了:

1.首先自定义一个异常类:

public class ArrayIndexException extends Exception{
    public ArrayIndexException() {
        // TODO Auto-generated constructor stub
        super();
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return"程序发生了越界异常! 请检查下标变化!";
    }
}

如上所示就是一个最基本的自定义异常类 ,它继承了Exception 并且重写了构造方法以及toString方法

2.现在我们尝试再主函数中调用它

public class ClassText {
    public static void main(String[] args) {
        int textArray[] = new int[3];//用于测试数组越界异常的数组
        try {
            textSetArray(textArray);//调用下方数组赋值方法
        } catch (ArrayIndexException e) {
            // TODO: handle exception
            e.printStackTrace();//如果发生了异常 则抛出自定义数组越界异常
        }
        System.out.println("go on !");
        for(int j = 0 ; j < textArray.length ; j++ )
            System.out.print(textArray[j] + "\t");//再越界之前的数成功赋值
    }
    private static void textSetArray(int[] textArray) throws ArrayIndexException{
        for ( int j = 0; j < (textArray.length + 1); j++) {//有+1可见 该测试一定越界
            textArray[j] = 5 ;//给数组原属赋值
        }
    }
}

如上所示,如果发生了异常,这才catch()语句中声称自定义的异常对象,并输出具体信息:

java异常的处理大概就这些类型,如果有疑问可以给我留言我再完善。

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • jwt生成token和token解析基础详解

    jwt生成token和token解析基础详解

    这篇文章主要为大家介绍了jwt生成token和token解析基础,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 实例讲述Java IO文件复制

    实例讲述Java IO文件复制

    本篇文章通过实例给大家详细讲述Java IO文件复制的相关知识点,需要的读者们学习下吧。
    2018-02-02
  • java解析json数组方式

    java解析json数组方式

    这篇文章主要介绍了java解析json数组方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java中的==使用方法详解

    Java中的==使用方法详解

    这篇文章主要给大家介绍了关于Java中的==使用方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • 详解Java如何实现基于Redis的分布式锁

    详解Java如何实现基于Redis的分布式锁

    在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段。这篇文章运用图文和实例代码介绍了Java如何实现基于Redis的分布式锁,文章介绍的很详细,对Java和Redis刚兴趣的朋友们可以参考借鉴,下面来一起看看。
    2016-08-08
  • mybatis-plus分页插件失效探究解决

    mybatis-plus分页插件失效探究解决

    这篇文章主要为大家介绍了mybatis-plus分页插件失效探究解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 解决IDEA 2022 Translation 翻译文档失败: 未知错误的问题

    解决IDEA 2022 Translation 翻译文档失败: 未知错误的问题

    这篇文章主要介绍了IDEA 2022 Translation 翻译文档失败: 未知错误,本文较详细的给大家介绍了IDEA 2022 Translation未知错误翻译文档失败的解决方法,需要的朋友可以参考下
    2022-04-04
  • 详解如何修改idea配置文件位置从C盘更改到D盘

    详解如何修改idea配置文件位置从C盘更改到D盘

    这篇文章主要给大家介绍了关于如何将idea的配置文件从默认的C盘调整到D盘,从而节省C盘使用空间,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下
    2023-10-10
  • java  线程详解及线程与进程的区别

    java 线程详解及线程与进程的区别

    这篇文章主要介绍了java 线程详解及线程与进程的区别的相关资料,网上关于java 线程的资料很多,对于进程的资料很是,这里就整理下,需要的朋友可以参考下
    2017-01-01
  • Java中八大包装类举例详解(通俗易懂)

    Java中八大包装类举例详解(通俗易懂)

    这篇文章主要介绍了Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02

最新评论