java基础(二十六)异常

【什么是异常】

异常:是在运行时期发生的不正常情况。。
在java中用类的形式对不正常的情况进行了描述和封装对象。
描述不正常的情况的类,就称为异常类。


以前正常流程代码和问题处理结合,现在将正常流程代码和问题处理代码分
离,提高阅读性。
其实异常就是java通过面向对象的思想将问题封装成了对象。用异常类对其
进行描述。
不同问题用不同的类进行具体的描述。比如角标越界。空指针等等。类中包
含着问题的名称,信息,位置等。

如:

以前的方式:

public static void sleep(int time){

   if(time <0){
    //处理方式

}

    if(time>10000){
    //处理方式        
}


  system.out.println("");         

}


代码中的  if{}是作为健壮性代码存在,system.out.println("");是作为正
常的代码。这样代码的阅读性比较差。java对这种问题进行了改良。将一些
常见的问题封装成对象。这个对象中包含着问题的名称,信息,位置等。

public static void sleep(int time){

   if(time <0){
    new 异常类();

}

    if(time>10000){
    new 异常类();        
}


  system.out.println("");         

}

【异常体系】

问题很多,意味着描述的类也很多,
将其共性向上抽取,形成了异常体系。

最终问题(不正常情况)就分成了两大类。
|--1,一般不可处理的。error
      特点是由jvm抛出的严重性问题,这种问题发生一般不针对处理,直接
修改程序        

|--2,可以处理的,Exception

共同父类Throwable:
    无论是error,还是异常,问题发生就应该可以抛出,让调用者知道
并处理。凡是可以被这两个关键字所操作的类和对象都具备可抛性。
    可抛性到底指的是什么呢?怎么体现可抛性呢?
    其实是通过两个关键字来体现的。
    throws  throw,凡是可以被这两个关键字所操作的类和对象都具有
可抛性。

    该体系的特点:
        子类的后缀名都是用其父类名作为后缀,阅读性很强。
    


【异常原理,异常对象抛出】

手动抛出异常
class Demo{


    public int method(int[]arr,int index){

    if(arr=null){

    throw new ArrayIndexOutOfBoundsException("自定义");

}
    if(index<0){
    throw new ArrayIndexOutOfBoundsException("数组的角标不能为
负数")    

    }

}

}

【自定义异常】


   如果一种异常在java中没有定义过,例如负数角标这种异常。那就按照
java异常的创建思想,面向对象,将负数角标进行自定义描述。并封装成对
象。


class FuShuIndexException extends Exception{

    FuShuIndexException(String msg){
        super(msg);

}

}

如果函数内发生了异常,那么需要在函数上声明,让调用者看到。
如果调用了发生异常的函数,那么必须处理,要吗捕获要吗抛出

throw用于函数内

throws用于函数上


例如:


class Demo{

    public int method()throws FuShuIndexException{//函数上声明
异常,是为了暴露出来让调用者预处理。

    if(index<0){
        throw new FuShuIndexException("");

    }
}

}


【异常的分类】

为什么上面的FuShuIndexException这个异常编译时会提示需要抛出,而类似
于NullPointerException,ArrayIndexOutOfBoundsException不会提示呢?这
个就要说到异常的分类了。


1.编译时被检测异常:只要是Exception和其子类都是,除了特殊子类
RuntimeException体系。这种问题一旦出现,希望编译时就进行检测,让这
种问题有对应的处理方式。这样的问题都可以针对性的处理。

2.编译时不检测异常(运行时异常):就是Exception中的RuntimeException
和其子类。这种问题的发生,无法让功能继续,运算无法进行,更多是因为
调用者调用时的程序强制停止,让调用者对代码进行修正。

【捕捉异常】
异常处理的捕捉形式:
这是可以对异常进行针对性处理的方式。
具体格式是

try{
//需要被检测的异常的代码

}catch(异常类 变量){//该变量用于接收发生的异常对象

//处理异常的代码
}
finally{
//一定会被执行的代码
//finally是trycatch后一定会执行的代码块
//即使catch里面有return
//通常用于关闭释放资源

}

什么时候try什么时候throws?

处理得了就try处理不了就抛。
不要什么代码都放到try{}中,只放被检测的代码
catch(){}中处理问题要有针对性,放对应的变量
多catch的情况要注意
如果在其他catch前面有catch(Exception e)那么其他catch是执行不到的,
这时程序就会报错
【异常处理原则】
原则:

1.函数内容如果抛出需要检测的异常,那么函数上必须要声明。
否则必须在函数内用try catch捕捉,否则编译失败


2.如果调用到了声明异常的函数,要么trycatch要么throws,否则编译失败

3.什么时候catch,什么时候throws呢?


功能内容可以解决,用catch。
解决不了用throws告诉调用者,由调用者解决


一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对
性的处理。

【异常注意事项】
1.子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只
能抛出父类的异常或者该异常的子类
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值