/* * 因为项目中会出现特有问题 * 而这些问题并未被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 仔鸡