Java中的异常

异常:
子类继承父类的方法重写时,子类抛出异常不能多于父类抛出的异常。子类抛出的异常需要更具体。也就是父类同名方法子异常。

异常的父类都是:throwable
子类:error,exception;

1、异常(throwable):程序运行过程中出现不正常的现象。
2、子类;error(针对进程,导致jvm停止)、Exception(针对线程)
3、非检查异常(非受检异常、为检查异常)运行时异常:可以避免、不强制处理。共同的父类:RuntimeExpction。
自定义异常可以选择继承 RuntimeExpction ,然后选择重写RuntimeExpction的方法。在try(){
throws new XXException(自定义的异常,继承于RuntimeExpction或者Expction)
}catch(Exception e){
e.重写的RuntimeExpction里面的方法名,有异常时就可以显示我们想要的异常信息
}

try {
               if (age < 0) {

                    throw new AgeLTOException();

               }else if (age>150) {
                    throw new AgeGT150Exception();
               }
          } catch (Exception e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }*/
//          catch (AgeGT150Exception e) {
//               // TODO: handle exception
//               e.printStackTrace();
//          }

常见的RuntimeExpection有:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

4、检查异常(受检异常、已检查异常)一般异常:不可避免,强制处理。提前预期处理,否则不能通过编译。javac。
5、异常都是继承throwable类。
6、处理异常:
(1)、第一种处理方式,在可能出现异常的方法后面用throws Expection抛出异常,若有有多个,则用逗号隔开。
如果异常最初出现的方法利用throws抛出异常,并没有真正处理异常,那么调用他的方法时要处理异常或者抛出异常。

(2)、try{
}catch(Expection e){

catch可以有多个。。。。

}catch(Expection e){

}………….
新版本处理捕获多个异常;
try(){
}catch(XXExpection | XXXXExpection e){
}
注意:(1)、用throws抛出异常来处理的时候,可以用该异常的父类来代替。

(2)、try{
}catch(Expection e){
}
catch(Expection e){
}finally{
//无论有没有抛出异常,finally都会执行
}

(3)、子类继承父类的方法重写时,子类抛出异常不能多于父类抛出的异常。子类抛出的异常需要更具体。也就是父类同名方法子异常。

7、自定义异常:
继承Expection或者RuntimeExpection

import java.util.Scanner;

/**
 * 自定义异常
 * @author zhaojw
 *
 */
public class MyException {

    public static void main(String[] args) {
        Division division=new Division();
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入被除数x:");
        int x=scanner.nextInt();
        System.out.println("请输入除数y:");
        int y=scanner.nextInt();
        try {
            int result=division.division(x, y);
            System.out.println(x+"除以"+y+"的结果为:"+result);
        } catch (NumberException e) {
            e.printStackTrace();
        }
    }
}

class NumberException extends Exception{
    private static final long serialVersionUID = 1L;

    public NumberException(String message){
        super(message);
    }
}

class Division{
    public int division(int x,int y) throws NumberException{
        if (y<0) {
            throw new NumberException("输入的数是"+y+",是一个负数,规定负数不能为除数。");
        }
        if (y==0) {
            throw new NumberException("输入的数是"+y+",是零,规定零不能为除数。");
        }
        return x/y;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值