/*
* 因为项目中会出现特有问题
* 而这些问题并未被java所描述并封装对象
* 所以对于这些特有的问题可以按照java的对问题封装的思想
* 将特有的问题,进行自定义的异常封装
*
* 自定义异常
*
* 当函数内部出现了throw抛出异常对象,那么就必须给对应的处理动作
* 要么在内部try catch处理
* 要么在函数上声明让调用者处理
*
* 一般情况下,函数内部出现异常,函数上需声明
*
* 发现打印的结果中只有异常名称,却没有异常的信息
* 因为自定义的异常并未定义信息
*
* 自定义信息
* 以为父类中已经把异常信息的操作都完成了
* 所以子类在构造时,将异常信息传递给父类通过super语句
* 那么就可以直接通过getMessage获得异常信息了;
*
* 自定义异常:
* 必须是自定义类继承Exception
*
* 继承Exception原因
* 异常体系有一个特点:因为异常类和异常对象都被抛出
* 他们都具备可抛性,这个可抛性是Throwable这个体系中独有的特点
*
* 只有这个体系中的类和对象才可以被throws和throw操作
*
* throws和throw的区别
* throws使用在函数上
* throw使用在函数内
*
* throws后面跟的是异常类,可以跟多个,用逗号隔开
* throw后面跟的是异常对象
*
* */
下面是个小例子
/*需求:在此特有项目中,除数为负数算异常*/
class FuShuException extends Exception {
private int value;
FuShuException(String msg, int value) {
super(msg);
this.value = value;
}
public int getValue() {
return value;
}
}
class Demo2 {
int div(int a, int b) throws FuShuException {
if (b < 0)
throw new FuShuException("除数出现了负数", b); // 手动通过throw关键字抛出一个自定义异常对象
return a / b;
}
}
public class ExceptionDemo2 {
public static void main(String args[]) {
Demo2 d = new Demo2();
try {
int x = d.div(4, -1);
System.out.println("x = " + x);
} catch (FuShuException e) {
System.out.println("错误的负数是:" + e.getValue());
System.out.println(e.getMessage());
}
System.out.println("over");
}
}
这个例子中catch的是自定义的异常,在使用异常的时候catch的异常要有针对性,这样我们才能对问题进行针对性解决。
-----------------------By 仔鸡