JAVA 中的异常(5)- 自定义异常
在开发中,为了适应业务的开发需求, 在 Java 中可以根据业务的异常情况自定义异常。
1. 自定义异常
所有的自定义异常都必须是 Throwable 的子类,在自定义继承时可以继承于 Exception 或者它的子类。
2. 自定义异常的分类
- 检查性异常类:自定义异常类继承于Exception。
- 运行时异常类:自定义异常类继承于RuntimeException
3. 自定义异常步骤:
- 自定义类继承Exception或其子类。
- 通过构造函数定义异常信息。
4. Objects的非空判断
Objects由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或 null-tolerant(容忍空指针的),那么在它的源码中,对对象为null的值进行了抛出异常操作。Objects通过调用requireNonNull(T obj)方法查看调用对象是否为null。
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
从上面源码可以看出,如果传递对象为 null,requireNonNull 方法会抛出 NullPointerException 异常,否则返回该对象。
5. 实例
5.1 自定义检查性异常类(MyException)
public class MyException extends Exception {
public MyException() { } // 无参构造
public MyException(String msg) {
super(msg); // msg : 异常提示信息
}
public MyException(Throwable throwable) {
super(throwable);// throwable 类型
}
}
5.2 自定义运行时异常类(MyRuntimeException)
public class MyRuntimeException extends RuntimeException {
public MyRuntimeException() { } // 无参构造
public MyRuntimeException(String msg) {
super(msg); // msg : 异常提示信息
}
public MyRuntimeException(Throwable throwable) {
super(throwable);// throwable 类型
}
}
5.3 自定义异常的使用实例
public class ExceptionDemo {
public static void main(String[] args) throws Exception {
int i = demo(3);
System.out.println("i = " + i);
}
public static int demo(int index) throws MyException{
int[] arr = {1,2,3};
if(index >= arr.length || index < 0)
throw new MyRuntimeException("您传递的索引错误,数组索引在0-2之间");
return arr[index];
}
}
5.4 Objects的非空判断实例
public static void main(String[] args) throws Exception {
Integer i = 10;
Integer i2 = Objects.requireNonNull(i);
System.out.println(i2);
}
6.
继承于现有的异常结构:RuntimeException 、Exception
提供全局常量:serialVersionUID
提供重载的构造器
public class MyException extends Exception{
static final long serialVersionUID = -7034897193246939L;
public MyException(){
}
public MyException(String msg){
super(msg);
}
}
此时使用自己定义的异常类
package com.atguigu.java2;
public class StudentTest {
public static void main(String[] args) {
try {
Student s = new Student();
s.regist(-1001);
System.out.println(s);
} catch (Exception e) {
// e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
class Student{
private int id;
public void regist(int id) throws Exception {
if(id > 0){
this.id = id;
}else{
throw new MyException("不能输入负数");
}
}
@Override
public String toString() {
return "Student [id=" + id + "]";
}
}
作者:快乐随行
https://www.cnblogs.com/jddreams/p/14281900.html
著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明原文作者及出处。