在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点
所有异常都必须是 Throwable 的子类。 如果希望写一个检查性异常类,则需要继承 Exception 类。 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。 1.自定义异常: [必须继承父类Exception or Throwable,调用父类的构造方法]
class 异常类名 extends Exception { public 异常类名(String msg) { super(msg); } } 2.异常处理: try{} catch(异常类名 y){} catch(异常类名 y){} .... finally{} throws 方法抛异常类名1,异常类名2 ... throw 手动抛对象异常; 3.方法说明 getMessage() //输出异常的信息 printStackTrace() //输出异常详细信息 简单的应用自定义异常:
package aa; public class TestTyr { public static void main(String[] args) { Emp emp = new Emp(); try { emp.show("男女"); } catch (MyException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 自定义异常 * * @author Administrator * */ class MyException extends Throwable { public MyException(String msg) { super(msg); } } /** * 员工类 * * @author Administrator * */ class Emp { /** * 使用自定义异常 * * @param sex * @throws MyException */ public void show(String sex) throws MyException { if (!"男".equals(sex) || !"女".equals(sex)) { throw new MyException("性别必须是男或女!"); } } } 异常使用注意事项: 当使用多个catch语句块来捕获异常时,需要将父类的catch语句块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报编译错误。 如果try语句块中存在return语句,那么首先会执行finally语句块中的代码,然后才返回。 如果try语句块中存在System.exit(0)语句,那么久不会执行finally语句块的代码了,因为System.exit(0)会终止当前运行的JVM。程序在JVM终止前结束执行。