Java 如何抛出异常、自定义异常
Java错误与异常的基本概念:
1.java中异常均继承自Throwable,其有两个重要的直接子类error与exception.
2.java错误error,大部分是由虚拟机爆出来的错误,是程序无法处理的错误,如OutOfMemoryError,当JVM需要更多内存空间而得不到满足时,就会爆出OutOfMemoryError。
3.Exception,异常,其下分类很多,如可查异常与不可查异常,运行时异常与非运行时异常,基本概念一样,只是说法不同罢了。其有个重要的子类即RuntimeException运行时异常,其它直接子类都归为非RuntimeException,如IOException,SQLException等。
a.非RuntimeException是在代码书写时,编译器给你检查提示你要进行try catch或throws处理。
IOException和SQLException
b.RuntimeException,编译器不会帮你自动检查,当你运行程序时,虚拟机才会给你爆出错误让你去处理,这个往往是我们编码逻辑或不规范导致的
下面我们来看看java异常类结构层次图:
异常中的try,catch,throw,throws,finally,相信都能很好理解,下面我重点来说自定义异常了。
自定义异常(重点)
A) 概念:一般在开发中只要业务方法出现例外基本上都交给一个异常类来处理。
B)如何开发:
i. 建立一个类,让此类继承Exception(一般不用)或RuntimeException(常用)
ii. 建立一个成员变量message,显示写出无参构造和有参构造
1.自定义一个类,集成自Exception
2.重写父类Exception所有的公共方法
3.重载构造函数
iii. 在业务方法处声明此异常
vi. 在业务方法中显示抛出自定义异常对象
为什么要使用自定义异常,有什么好处?
1.我们在工作的时候,项目是分模块或者分功能开发的 ,基本不会你一个人开发一整个项目,使用自定义异常类就统一了对外异常展示的方式。
2.有时候我们遇到某些校验或者问题时,需要直接结束掉当前的请求,这时便可以通过抛出自定义异常来结束,如果你项目中使用了SpringMVC比较新的版本的话有控制器增强,可以通过@ControllerAdvice注解写一个控制器增强类来拦截自定义的异常并响应给前端相应的信息(关于springMVC控制器增强的知识有空再和大家分享)。
3.自定义异常可以在我们项目中某些特殊的业务逻辑时抛出异常,比如"中性".equals(sex),性别等于中性时我们要抛出异常,而Java是不会有这种异常的。系统中有些错误是符合Java语法的,但不符合我们项目的业务逻辑。
4.使用自定义异常继承相关的异常来抛出处理后的异常信息可以隐藏底层的异常,这样更安全,异常信息也更加的直观。自定义异常可以抛出我们自己想要抛出的信息,可以通过抛出的信息区分异常发生的位置,根据异常名我们就可以知道哪里有异常,根据异常提示信息进行程序修改。比如空指针异常NullPointException,我们可以抛出信息为“xxx为空”定位异常位置,而不用输出堆栈信息。
Java 如何抛出异常、自定义异常的更多相关文章
- 设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。
设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入 ABC,则没有抛出异常.(只有 ...
- Java学习之自定义异常
1 package com.gh; import java.util.Scanner; /** * 自定义异常 * @author ganhang * */ public class Exceptio ...
- Java 如何抛出异常、自定义异常、手动或主动抛出异常
public static void main(String[] args) { try { throw new Exception("抛出异常"); } catch (Excep ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- java基础之自定义异常类及throw和throws的区别
一.异常的架构: Throwable类:所以异常类都是Throwable的子类,它派生两个子类 Error和Exception. Error类:表示仅靠程序本身无法恢复的的严重错误,比如内存溢出,虚拟 ...
- java异常处理和自定义异常利用try和catch让程序继续下去(回来自己再写个例子试运行下)
注意:想在catch的参数里使用自定义的异常,则必须先将这个异常抛出才行.(throws是具有抛出异常的能力,并未抛出,throw new MyException是抛出异常,catch是捕获异常,只有 ...
- 讲一讲java异常及自定义异常
1.异常,说白了.两种,一种就是就是不能让代码通过编译的异常.另一种就是程序运行期间出现的异常.异常就是错误,只要出现异常,程序就不会向下运行了.就不会执行后面的代码了.这时候就可以通过显示statc ...
- java 重新抛出异常
一.有时希望把刚捕获的异常重新抛出,尤其时在使用Exception捕获所以异常的时候,既然已经得到了对当前异常对象的引用,可以重新把它抛出: catch(Exception e){ System.ou ...
- Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6403033.html 在项目中的应用见: https://github.com/ygj0930/CoupleS ...
随机推荐
- mui 访问系统相册将图片显示到网页
访问系统相返回值为一个对象,通过转换为字符串可以查看,path.files[0]为返回路径去除路径赋值到src 调用摄像头返回的相片的path为一个路径通过 plus.io.resolveLocalF ...
- qrcode render 二维码扫描读取
著名的 qrcode 是 zxing https://github.com/zxing/zxing 基于 java, java 真的是轮子多啊... zxing 的 javascript 版本是 ht ...
- Linux中apt与apt-get命令的区别与解释
2019-01-15 14:35:39 随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版 ...
- Redis持久化AOF和RDB对比
RDB持久化 AOF持久化 全量备份,一次保存整个数据库 增量备份,一次保存一个修改数据库的命令 保存的间隔较长 保存的间隔默认一秒 数据还原速度快 数据还原速度一般 save会阻塞,但bgsave或 ...
- Getting Started with Processing 第十章——对象
不像原始数据类型boolean,int 和 float 只能存一个值,一个对象可以存很多值.但这也是我们讲的一部分,对象也是用相关函数将变量编组的一种方式. 域和方法 在对象的上下文中,一个变量被叫做 ...
- 20170821xlVBA跨表公式套用
Public Sub CopyModelHideBlankRows() AppSettings Dim StartTime As Variant Dim UsedTime As Variant Sta ...
- Web版记账本开发记录(一)
//index.js var util = require("../../utils/util.js"); //获取应用实例 var app = getApp(); Page({ ...
- ubuntu下常用命令
目录 一.查找命令 二.打开相应文件 三.查看系统资源占用 四.Ubantu解压文件 五.虚拟机ubuntu server 14.0 根目录扩容 七.ubuntu 关机,重启,注销命令 1 关机命令 ...
- php 常用函数总结
1. is_numeric() // 判断变量是不是数字或者数字字符串 2. array_column() // 获取某一列 3. array_search() // array_search(val ...
- mysql分组统计以及全部统计union all使用
select '全部' AS `organ_category`, COUNT(*) AS amount FROM `organ_new` WHERE `city_code` ='SZ0755' AND ...