项目中会出现一些Java中没有定义的异常,对于这些异常可以按照Java对问题封装的思想将特有问题进行自定义异常封装。
自定义异常必须继承Exception。
下边写一个例子说明如何自定义异常。
- class FuShuException extends Exception
- {
- /*
- 如何定义异常信息:因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时将异常信息传递给父类通过super语句,
- 那么就可以直接通过getMessage()方法获取自定义的异常信息。
- */
- private int value;
- FuShuException(String msg,int value)
- {
- super(msg);
- this.value = value;
- }
- public int getValue(){
- return value;
- }
- }
- /*
- 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理,要么在函数上声明让调用者处理。
- 一般情况下,函数内出现异常,函数上需要声明。
- throw和throws的区别:
- 1.throw使用在函数内,后跟异常对象;
- 2.throws使用在函数上,后跟异常类,可以是多个,用逗号隔开。
- */
- class Demo
- {
- int div(int a,int b)throws FuShuException
- {
- if (b<0)
- throw new FuShuException("除数为负数了!!",b);//手动通过throw关键字抛出异常
- return a/b;
- }
- }
- class DemoExceptionUserDefined
- {
- public static void main(String[] args)
- {
- Demo d = new Demo();
- try
- {
- int x = d.div(4,-1);
- System.out.println("x="+x);
- }
- catch (FuShuException e)
- {
- System.out.println("负数为"+e.getValue());
- e.printStackTrace();//打印异常名称:异常信息:异常出现的位置(其实JVM默认的异常处理机制就是调用printStackTrace跟踪异常信息)
- }
- System.out.println("over!");
- }
- }
- /*
- * 输出结果
- * 错误的除数为-1
- heima.day01.FuShuException: 除数为负数了!!
- at heima.day01.DemoExceptionUserDefined.div(DemoExceptionUserDefined.java:30)
- at heima.day01.DemoExceptionUserDefined.main(DemoExceptionUserDefined.java:19)
- over!!
- */
复制代码
|
|