之前提到Java中本身异常有编译时异常和运行时异常两种,是已经由Java官方定义好了的异常,而自定义异常,顾名思义,是我们自定义的,由我们定义的这个类为异常类。
打个比方,如Java中本已经定义好的编译时异常中的IOException,在程序进行输入(读取文件,网络连接等)或输出(写入文件,网络传输等)操作时,如果发生了错误,就会抛出IOException,而有些异常是我们基于人类主观上认为的不合理或不存在的一个异常现象,比如定义一个飞翔的方法让猫去实现,显然猫不会飞,再比如定义一个打分的方法,如果打分超过了满分也是不合理的,这些Java本身判断不了的异常现象,就需要我们人主观上去定义为异常。
那如何来自定义异常呢,自定义异常只需要把该类继承Exception类时,这就是一个异常类。如下是代码演示:
package MyException;
public class BIMException extends Exception {
public BIMException() {
}
public BIMException(String message) {
super(message);
}
}
上面定义了一个BIMException的类,当我把它继承Exception类的时候,它就成了一个自定义异常类,然后我写了一个有参一个无参的构造方法,用于后面处理自定义异常时创建对象和打印异常信息。
这是一个BIM异常,创建思路是如果计算的的BIM指数不合理(比如小于零或者大于50,正常范围在18.5~23.9之间)就抛出一个BIM异常。
全代码如下:
import java.util.Scanner;
public class BIM extends Exception {
private double bim;
public void bim_check(double bim) throws BIMException {
if (bim < 10 || bim > 50) {
throw new BIMException("你输入的体重或身高不合理,请重新输入");
} else if (bim > 23.9 || bim < 18.5) {
System.out.printf("你的BIM指数为%.2f,不正常", bim);
System.out.println("");
} else {
System.out.printf("你的BIM指数为%.2f,正常", bim);
System.out.println("");
}
}
public void bim_count() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的体重(千克):");
double a = scanner.nextDouble();
System.out.println("请输入你的身高(米):");
double b = scanner.nextDouble();
bim = a / (b * b);
}
public double getBim() {
return bim;
}
public void setBim(int bim) {
this.bim = bim;
}
}
测试类:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
BIM b = new BIM();
System.out.println("进行BIM测试请按1");
System.out.println("结束测试请按其他任意键");
Scanner sc = new Scanner(System.in);
if (sc.hasNext()) {
int num = sc.nextInt();
while (num == 1) {
b.bim_count();
try {
b.bim_check(b.getBim());
} catch (BIMException B) {
B.printStackTrace();
}
}
}
}
}