Java(异常)

常见异常

  • 数组角标越界
    ArrayIndexOutofBoundsException

  • 空指针异常
    NullPointerException

  • 栈溢出异常
    StackOverFlowError

  • 堆溢出异常
    OutofHeapError

  • 类型转换异常
    ClassCastException

  • 数学异常
    ArithmeticException

  • 数据转换异常
    NUmberFormatException

异常和错误的发生和区别
什么是异常: Java运行时期发生的问题就是异常
异常和错误

  • 异常:程序在运行期间发生了异常,通常可以有针对性的处理方式的。
  • 错误:程序在运行期间发生了错误,通常不会有针对性的处理方式。错误的的发生往往都是系统级别的问题,都是jvm所在系统发生的并反馈给jvm的。无法针对理,只能修正代码。

我们如果用面向对象的思考方式对待异常
异常应该有哪些内容?名称 位置 原因
异常当成一个类去看待!
错误多不多?各种各样的错误?
该异常类的子类多不多?
所以异常继承体系就出来了!
问 异常体系的最终父类是Object
但是异常体系的体系内最终父类 Throwable

当函数内部出现问题:

  • 要么函数内部自己解决
    return 正常结果

  • 要么函数将问题反馈给调用者
    throw 异常对象

抛出异常:JVM抛 throw抛

Throwable

  1. Error 严重性错误 JVM直接抛出内存错误
    直接改代码吧

  2. Exception 一般性错误 JVM可抛 throw抛
    可以尝试改正(已经事先有解决方案)

  3. RuntimeException 运行时异常
    其他子类 编译时异常

  4. 自定义异常 继承Exception即可

对于编译时异常 通常有两种处理方案:

  1. 捕获 就是自身内部处理掉这个问题
  try
  {
    //需要被检测的语句。
  }
  catch(异常类变量)//参数。
  {
   //异常的处理语句。
  }
  finally
  {
  //一定会被执行的语句。
  }
  1. 声明 就是告诉调用者该函数可能会出事
    throws 异常类

异常在继承或者实现中的使用细节:
● 子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者声明越来越精细。
● 当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集越来越精细。
当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。

举例:父类存在这种情况,接口也有这种情况,
问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常,怎么办?
无法进行throws声明,只能catch的捕获。万一问题处理不了呢? catch中继续throw抛出,但是只能将异常转换成RuntimeException子类抛出
code:

class ExceptionDemo02{
    public static void main(String[] args){
        /*
        MyString ms=new MyString();
        System.out.println(ms.charAt(10));
        */
        try{
            sleep(-10);
        }catch(TimeCannotNegetiveException e){
            System.out.println("下课!");
        }
    }
    public static void sleep(int time) throws TimeCannotNegetiveException {
        if(time<0){
            throw new TimeCannotNegetiveException("时间不能为负数");
        }
        if(time>100000){
            try{
                throw new TimeOverLimitException("睡死了!");
            }catch(TimeOverLimitException e){
                time=10;
            }
        }
        System.out.println("睡了"+time+"秒");
    }
}
//时间不能为负数异常
class TimeCannotNegetiveException extends Exception{
    TimeCannotNegetiveException(String reason){
        super(reason);
    }
}
//时间不能超过时限异常
class TimeOverLimitException extends Exception{
    TimeOverLimitException(String reason){
        super(reason);
    }
}

class MyString{
    char[] value=new char[10];
    public char charAt(int index){
        if(index<0||index>=value.length){
            throw new ArrayIndexOutOfBoundsException();
        }
        return value[index];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值