廖雪峰Java3异常处理-1错误处理-4自定义异常
JDK已有的异常:
- RuntimeException
* NullPointerException
* IndexOutOfBoundsException
* SecurityException
* IllegalArgumentException- NumberOfFormatException
- IOException
* UnsupportedCharsetException,FileNotFoundException,SocketException - ParseException,GeneralSecurityException,SQLException,TimeoutException
当需要抛出异常时,尽量使用JDK已定义的异常类型。如传入的参数不正确,一般使用IllegalArugmentException.
定义新的异常类型: - 从合适的Exception派生
- 从RuntimeException派生
不需要强制捕获自定义的异常,也不需要在方法中声明需要抛出的异常
public class BadFileFormatException extends IOException{}
public class UserNotFoundException extends RuntimeException{}
自定义异常
可以定义新的异常关系树
从适合的Exception派生BaseException
其他Exception从BaseException派生
public class BaseException extends RuntimeException{}
public class UserNotFoundException extends BaseException{}
public class LoginFailedException extends BaseException{}
自定义异常时应该提供多个构造方法
可以直接使用generate-Constructor导入父类的构造的方法

public class BaseException extends RuntimeException {
public BaseException() {
}
public BaseException(String message) {
super(message);
}
public BaseException(String message, Throwable cause) {
super(message, cause);
}
public BaseException(Throwable cause) {
super(cause);
}
public BaseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
public class UserNotFoundException extends BaseException {
public UserNotFoundException() {
}
public UserNotFoundException(String message) {
super(message);
}
public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
}
public UserNotFoundException(Throwable cause) {
super(cause);
}
public UserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
总结:
自定义的异常应该从合适的Exception派生
推荐RuntimeException
自定义异常应该提供多个构造方法
可以使用IDE根据父类快速创建构造方法
廖雪峰Java3异常处理-1错误处理-4自定义异常的更多相关文章
- 廖雪峰Java3异常处理-1错误处理-3抛出异常
1.异常的传播 当某个方法抛出异常时: 如果当前方法没有捕获,异常就被抛到上层调用方法 直到遇到某个try...catch被捕获 使用printStackTrace()打印处方法的调用栈 import ...
- 廖雪峰Java3异常处理-1错误处理-2捕获异常
1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常 可能发生异常的语句放在try{... ...
- 廖雪峰Java3异常处理-1错误处理-1Java的异常
1.计算机运行中的错误 在计算机程序运行的过程中,错误总会出现,不可避免的 用户输入错误 读写文件错误 网络错误.内存耗尽.无法连接打印机不可 String s = "abc"; ...
- 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging
Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...
- 廖雪峰Java3异常处理-2断言和日志-1使用断言
1.断言 断言Assertion是一种程序调试方式 使用assert关键字 断言条件预期为true 如果断言失败,抛出AssertionError,停止程序 可选的断言消息,断言失败,就会抛出 pub ...
- 廖雪峰Java3异常处理-2断言和日志-4使用Log4j
1.Log4j Log4j是目前最流行的日志框架.有两个版本 1.x:Log4j 2.x:Log4j2 Log4j下载地址https://www.apache.org/dyn/closer.lua/l ...
- 廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging
1.日志 为了取代System.out.println() 可以设置输出样式 可以设置输出级别,禁止某些级别输出 可以被重定向到文件 可以按包名控制日志级别 2.JDK内置Logging 在java. ...
- 廖雪峰Java-3流程控制-7for循环
for循环 for循环使用计数器实现循环 for循环条件需要设置:计数器初始值:循环前检测条件:每次循环后如何更新计数器 计数器变量通常命名为i int[] ns = {1,4,9,16,25}; f ...
- 爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
随机推荐
- acm 2001
格式化输出 //////////////////////////////////////////////////////////////////////////////// #include<i ...
- shell command
查看网卡流量报告 sar -n DEV kill pid ps -ef |grep xxx |grep -v grep |awk '{print $2}' |xargs ki ...
- Full Schema Stitching with Apollo Server
转自: https://tomasalabes.me/blog/nodejs/graphql/apollo/2018/09/18/schema-stitiching-apollo.html Full ...
- vm centos7中用NAT模式配置上网
第一步:设置虚拟机的NAT相关网络设置: 点击5标致处的“NAT设置”会出现设置6标致处的网关. 第二部:设置操作系统网络设置,右击上图中9标致处的系统,点击设置 第三部:配置操作系统ip ...
- apache常用配置文件讲解
apache 的httpd.conf常用配置说明 # ServerRoot: The top of the directory tree under which the server's # conf ...
- java_main
Java中用户向系统传递参数的三种基本方式 main方法 在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的 ...
- AD10 没有原理图是否可以修改 PCB
AD10 没有原理图是否可以修改 PCB 有朋友问 AD 是否可以在没有原理的情况下修改 PCB 呢? 答案是肯定的,可以. 比如增加元件和网络,可以先增加元件封装,再打开网络管理给焊盘加上网络. 相 ...
- react-redux 知识点
React-Redux 使用 如果只使用redux,那么流程是这样的: component --> dispatch(action) --> reducer --> subscrib ...
- jdk动态代理在idea的debug模式下不断刷新tostring方法
在jdk的动态代理下,在使用idea进入动态代理的debug模式下,单步调试会刷新idea的tostring方法,让他自己重走了一遍代理 这个问题暂时无解
- cachecloud安装部署
项目地址:https://github.com/sohutv/cachecloud # 初始化数据库 默认插入admin超级管理员,用户名admin, 密码:admin 安装mysql yum -y ...