Java抛出异常与自定义异常类应用示例
作者:水中鱼之1999 发布时间:2022-10-23 01:58:52
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/qq_43377749/article/details/84935359


猜你喜欢
- 项目里用到@within时,出现了一些问题,使用@target就可以解决,但又会出现一些新的问题,因此本文探讨了在spring中,使用@wi
- 今天跟大家分享一个利用外部Jar包来实现Java操作CSV文件一.资源下载1.直接下载Jar包:javacsv-2.0.jar2.利用Mav
- java 实现MD5加密算法的简单实例实现代码:import java.security.NoSuchAlgorithmException;
- 如何实现?1.)首先实现全屏第一种:继承主题特定主题在Android API 19以上可以使用****.TranslucentDecor**
- 1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),
- 咱们废话不多说进入主题、系统主页展示:用户登录后进行系统首页:主要功能模块如下、分角色管理、超级管理员拥有最高权限、可以进行菜单灵活控制、用
- 如果想分析Android下 某个APP的网络数据交互,需要在Android手机上抓包,最常用的抓包工具非tcpdump莫属,用tcpdump
- 本文实例讲述了Android内容提供者ContentProvider用法。分享给大家供大家参考,具体如下:PersonContentProv
- 本文讲述绘制Android自定义各种图形效果,为自定义控件的入门篇 相关视频链接: Android自定义控件系列 http://edu.cs
- 这是一个可以从乱码文本中得到正确的原始文本的程序,其基于的原理在于错误的编码往往导致位补充,因此正确的文本使用的字节数应该是最少的(之一)。
- 本文实例讲述了Java实现的RSA加密解密算法。分享给大家供大家参考,具体如下:import java.awt.AlphaComposite
- springboots使用的版本是2.0.1,注意不同版本可能有差异,并不一定通用添加Mybatis的起步依赖:<!--mybatis
- 图1如图1,我们工作过程中,无论平台网站还是企业官网,总少不了新闻展示。如某天产品经理跟我们说,推广人员想要抓取百度新闻中热点要闻版块提高站
- 默认日志 Logback :默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其
- 引言在平时的工作中多多少少都会接触到注册中心,当你的应用从单机到拆分成多个服务,每个服务又有多个实例的情况时,那么对服务IP地址管理的要求就
- 1、概述 限流的含义是在单位时间内确保发往某个模块的请求数量小于某个数值,比如在实现秒杀功能时,需要确保在10秒内发往支付模块的请求数量小
- 下文笔者讲述maven引入本地jar包时,运行报错"java.lang.NoClassDefFoundError"的处理
- Java——获取字符串编码格式判断一个字符串的编码格式: public static St
- 1. 前言Compose 具有超强的兼容性,兼容现有的所有代码,Compose 能够与现有 View 体系并存,可实现渐进式替换。这就很有意
- 最新Spring Data JPA官方参考手册 Version 2.0.0.RC2,2017-07-25https://docs.sprin