java 异常类编写_如何编写和应用Java的自定义异常类

11.7.1编写自定义异常类的模式

编写自定义异常类其实是继承一个

API

标准异常类,用新定义的异常处理信息覆盖原有信息的过程。经常使用的编写自定义异常类的模式以下:

public class CustomException extends Exception {//

或者继承任何标准异常类

public CustomException(){}//

用来建立无参数对象

public CustomException(String message) {//

用来建立指定参数对象

super(message);//

调用超类构造器

}

}

固然也可选用

Throwable

做为超类。其中无参数构造器为建立缺省参数对象提供了方便。第二个构造器将在建立这个异常对象时提供描述这个异常信息的字符串,经过调用超类构造器向上传递给超类,对超类中的

toString()

方法中返回的原有信息进行覆盖。

来讨论一个具体例子。假设程序中须要验证用户输入的表示年龄的数据必须是正整数值。咱们能够按照以上模式编写这个自定义异常类以下:

public class NegativeAgeException extends Exception {

//

或者:

extends Throwable

public NegativeAgeException(){}

public NegativeAgeException(String message) {

super(message);

}

}

下面是应用这个自定义异常类的例子

:

//

完整程序存在本书配套资源目录为

Ch11

中名为

NegativeAgeExceptionTest.java

...

try{

String ageString = JOptionPane.showInputDialog("Enter your age: ");

if (Integer.parseInt(ageString) < 0)

throw new NegativeAgeException("Please enter a positive age");

else

JOptionPane.showMessageDialog(null, ageString, "Age", 1);

}

catch(NegativeAgeException e){

System.out.println(e);

}

...

或者,能够建立一个缺省对象,而后在

catch

中打印具体信息,如:

throw new NegativeAgeException();

...

catch (NegativeAgeException e) {

System.out.println("Please enter a positive age");

将产生与第一个例子相同的效果。

11.7.2自定义异常处理

不管是利用标准

API

异常类来处理特殊的异常,或者编写自定义的异常类来达到一样目的,问题的关键是:

1.

当这个异常发生时,如何及时捕获这个异常。

2.

捕获这个异常后,如何产生精确的异常处理信息。

毋庸置疑,咱们不可能期待

JVM

自动抛出一个自定义异常,也不可以期待

JVM

会自动处理一个自定义异常。发现异常、抛出异常以及处理异常的工做必须靠编程人员在代码中利用异常处理机制本身完成。

通常状况下,发现和抛出一个自定义异常经过在

try

程序块中利用

if

throw

语句完成,即:

try {

...

if (someExceptionConditon == true) {

throw new CustomException("A custom exception xxx occurred. Please

check your entry...")

...

}

catch (CustomException e) {

...

}

而打印异常处理信息能够在抛出时包括在构造器的参数中,或者包括在处理这个异常的

catch

中。

另外应该注意在自定义异常发生以前,有可能产生标准异常的状况。例如,在一个须要验证年龄必须是正整数值的程序中,利用自定义异常类,如

NegativeAgeException

,验证输入的年龄是否正整数,即:

try {

...

if (Integer.parseInt(ageString) < 0)

throw NegativeAgeException("Please enter a positive age");

else

...

}

catch (NumberFormatException e) {

System.out.println(e);

}

catch (NegativeAgeException e) {

System.out.println(e);

}

...

注意在这个代码中,若是

ageString

是非法整数字符串,如“

25ab

”,系统将首先抛出

NumberFormatException

,而不会执行

throw NegativeAgeException("Please enter a positive age")

。因此应该在

catch

中加入对

NumberFormatException

的处理,如以上代码所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值