自定义异常

本文记录Java学习过程中遇到的自定义异常~

这些异常都是JDK内部定义好的,并且这些异常不好找。书写时也很不方便,那么能不能自己定义异常呢?

之前的几个异常都是java通过类进行的描述。并将问题封装成对象,异常就是将问题封装成了对象。这些异常不好认,书写也很不方便,能不能定义一个符合我的程序要求的异常名称。既然JDK中是使用类在描述异常信息,那么我们也可以模拟Java的这种机制,我们自己定义异常的信息,异常的名字,让异常更符合自己程序的阅读。准确对自己所需要的异常进行类的描述。

通过阅读异常源代码:发现java中所有的异常类,都是继承Throwable,或者继承Throwable的子类。这样该异常才可以被throw抛出。

说明这个异常体系具备一个特有的特性:可抛性:即可以被throw关键字操作。

并且查阅异常子类源码,发现每个异常中都调用了父类的构造方法,把异常描述信息传递给了父类,让父类帮我们进行异常信息的封装。

示例代码(NullPointerException异常类):

public class NullPointerException extends RuntimeException {
    public NullPointerException() {
        super();//调用父类构造方法
    }
    public NullPointerException(String s) {
        super(s);//调用父类具有异常信息的构造方法
    }
}

现在,我们来定义个自己的异常,即自定义异常。格式:

Class 异常名 extends Exception{ //或继承RuntimeException
	public 异常名(){
       
       }
	public 异常名(String s){ 
               super(s); 
        }
}

示例代码(自定义异常继承Exception):

class MyException extends Exception{
	/*
	为什么要定义构造函数,因为看到Java中的异常描述类中有提供对异常对象的初始化方法。
	*/
	public MyException(){
		super();
	}
	public MyException(String message)	{
		super(message);// 如果自定义异常需要异常信息,可以通过调用父类的带有字符串参数的构造函数即可。
	}
}

示例代码(自定义异常继承RuntimeException):

class MyException extends RuntimeException{
	/*
	为什么要定义构造函数,因为看到Java中的异常描述类中有提供对异常对象的初始化方法。
	*/
	MyException(){
		super();
	}
	MyException(String message)	{
		super(message);// 如果自定义异常需要异常信息,可以通过调用父类的带有字符串参数的构造函数即可。
	}
}

标签: none