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. 基于BP的B/S架构破解

    思路历程: 1.获取用户名 2.获取密码字典 3.使用BP爆破 案例: 管理人员在平时的网络生活中没有良好的个人信息保护,让不法份子有机可乘.例如WordPress等的类似网站使用PHP开发,虽然功能 ...

  2. linux-----初学命令和理解

    the following Codes has been confirmed by me 1.头部标识[pecool@demo ~]: 其中pecool代表登入用户:demo代表系统名称:~代表当前处 ...

  3. Js 判断输入的验证码是否一致

    实现效果: 判断输入的验证码是否一致 如果不同,alert出验证码输入有误~, 输入正确输出登录成功. <!DOCTYPE html> <html lang="en&quo ...

  4. 剑指offer-反向遍历链表-栈和递归2种方法(一次性跑通)

  5. torchvision库简介(翻译)

    部分跟新于:4.24日    torchvision 0.2.2.post3 torchvision是独立于pytorch的关于图像操作的一些方便工具库. torchvision的详细介绍在:http ...

  6. linux常见系统调用函数列表

    以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完 ...

  7. MySQL Transaction--TPS计算规则

    TPS计算规则 在MYSQL 中,TPS(Transaction Per Second)的计算方法为 (com_commit+com_rollback)/time,但com_commit和com_ro ...

  8. Visual Studio不显示智能提示代码,快捷键Alt+→也不出现

    最近安装了Dev Express的控件,我的vs2017 Enterprise版的环境,智能提示补全代码的快捷键功能,好像被修改了,不能使用了. 我原来的时候,比如在代码中输入如下代码: Consol ...

  9. python-廖雪峰,map/reduce学习笔记

    # _*_ coding:utf-8 _*_from functools import reduce def str2int(s): digits = {'0': 0, '1': 1, '2': 2, ...

  10. Java集合整理

    0,基础概念 Collection:统计大小.插入或删除数据.清空.是否包含某条数据,等等.而Collection就是对这些常用操作进行提取,只是其很全面.很通用.size(),isEmpty(),c ...