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自定义异常的更多相关文章

  1. 廖雪峰Java3异常处理-1错误处理-3抛出异常

    1.异常的传播 当某个方法抛出异常时: 如果当前方法没有捕获,异常就被抛到上层调用方法 直到遇到某个try...catch被捕获 使用printStackTrace()打印处方法的调用栈 import ...

  2. 廖雪峰Java3异常处理-1错误处理-2捕获异常

    1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常 可能发生异常的语句放在try{... ...

  3. 廖雪峰Java3异常处理-1错误处理-1Java的异常

    1.计算机运行中的错误 在计算机程序运行的过程中,错误总会出现,不可避免的 用户输入错误 读写文件错误 网络错误.内存耗尽.无法连接打印机不可 String s = "abc"; ...

  4. 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging

    Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...

  5. 廖雪峰Java3异常处理-2断言和日志-1使用断言

    1.断言 断言Assertion是一种程序调试方式 使用assert关键字 断言条件预期为true 如果断言失败,抛出AssertionError,停止程序 可选的断言消息,断言失败,就会抛出 pub ...

  6. 廖雪峰Java3异常处理-2断言和日志-4使用Log4j

    1.Log4j Log4j是目前最流行的日志框架.有两个版本 1.x:Log4j 2.x:Log4j2 Log4j下载地址https://www.apache.org/dyn/closer.lua/l ...

  7. 廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging

    1.日志 为了取代System.out.println() 可以设置输出样式 可以设置输出级别,禁止某些级别输出 可以被重定向到文件 可以按包名控制日志级别 2.JDK内置Logging 在java. ...

  8. 廖雪峰Java-3流程控制-7for循环

    for循环 for循环使用计数器实现循环 for循环条件需要设置:计数器初始值:循环前检测条件:每次循环后如何更新计数器 计数器变量通常命名为i int[] ns = {1,4,9,16,25}; f ...

  9. 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

随机推荐

  1. acm 2001

    格式化输出 //////////////////////////////////////////////////////////////////////////////// #include<i ...

  2. shell command

    查看网卡流量报告  sar  -n  DEV  kill pid  ps  -ef  |grep xxx  |grep -v grep  |awk '{print $2}'   |xargs   ki ...

  3. Full Schema Stitching with Apollo Server

    转自: https://tomasalabes.me/blog/nodejs/graphql/apollo/2018/09/18/schema-stitiching-apollo.html Full ...

  4. vm centos7中用NAT模式配置上网

    第一步:设置虚拟机的NAT相关网络设置:   点击5标致处的“NAT设置”会出现设置6标致处的网关.   第二部:设置操作系统网络设置,右击上图中9标致处的系统,点击设置   第三部:配置操作系统ip ...

  5. apache常用配置文件讲解

    apache 的httpd.conf常用配置说明 # ServerRoot: The top of the directory tree under which the server's # conf ...

  6. java_main

    Java中用户向系统传递参数的三种基本方式 main方法 在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的 ...

  7. AD10 没有原理图是否可以修改 PCB

    AD10 没有原理图是否可以修改 PCB 有朋友问 AD 是否可以在没有原理的情况下修改 PCB 呢? 答案是肯定的,可以. 比如增加元件和网络,可以先增加元件封装,再打开网络管理给焊盘加上网络. 相 ...

  8. react-redux 知识点

    React-Redux 使用 如果只使用redux,那么流程是这样的: component --> dispatch(action) --> reducer --> subscrib ...

  9. jdk动态代理在idea的debug模式下不断刷新tostring方法

    在jdk的动态代理下,在使用idea进入动态代理的debug模式下,单步调试会刷新idea的tostring方法,让他自己重走了一遍代理 这个问题暂时无解

  10. cachecloud安装部署

    项目地址:https://github.com/sohutv/cachecloud # 初始化数据库 默认插入admin超级管理员,用户名admin, 密码:admin 安装mysql yum -y ...