异常

mac2022-06-30  22

异常(Exception)  运行时出现的问题 ArrayIndexOutOfBoundException NullPointerException ClassCastException StackOverflowException 通知方法出错的一种方式

程序中总会遇到各种错误(运行时错误) 1.需要一种方式,通知调用者,程序出问题    1.通过返回值     Queue<Integer> queue=....;     queue.poll();//从队列中删除一个数     //当队列为空时,返回null    缺点:1.占用一个特殊值              2.检查起来很麻烦    2.通过异常      queue.remove();     //当队列为空,抛异常

语法: 1.如何定义异常         定义一种错误 2.如何抛出异常         表示当前调用发生了某种错误 throw new RuntimeException();//系统已经定义好的运行时异常 抛出了一个运行时异常 异常抛出去会中断当前的执行流,类似于return 3.如何处理异常              调用者的责任   try/catch/finally

捕获异常 try{ 可能会抛出异常的语句 list.get(0); throw new ArraysIndexOutOfBound();//throw后面是对象 }catch(NullPointerException e){     只管处理该类空指针的异常,或者他子类的空指针异常,不处理其他类型的异常 } catch(Exception e){//捕获所有的异常,类似于基类的概念} catch(异常类型 异常对象名) catch(异常1|异常2 e)两个异常同一种处理方法 异常是从上往下匹配,一旦匹配中,就不匹配了

try{    //可能抛异常的语句   可以写一定会出现异常的,可以写可能会抛出异常的 若可能抛异常  却没抛异常,就执行try后面的, 跑了一场最后就执行finally中的 }finally{ 必须要执行的语句 } 因为抛异常会中断,不会执行下面的语句,这样写就可以抛异常后,还可以执行这个语句

有没有异常都会执行finally部分

也可以 try{}catch{}finally{}

try块不能省略,catch和finally不能同时省略,catch可以多重

try和finally中同时有return语句,try中不返回,先存起来,会返回finally的,若finally中没有return语句 则返回try中的

异常是一种对象,java中一切皆对象 只有你抛出的时候,异常对象才被实例化

e.printStackTrace();写在catch里,打印出异常的调用栈,可以追踪异常 getMessage() ;异常消息

发生了错误应该怎么办? 错误可能有哪些? 1.硬件错误  不可恢复的错误  CPU烧了  不要catch error 2.可恢复错误   1.网络卡了       1.重试    2.通知修复(自动/手动) 3.程序员造成的错误(代码错误)   尽可能早的暴露   不要catch或者catch后增加日志打印

Throwable(java中所有可被抛出的东西)分为Exeption  和error(不可恢复) Exception分为可恢复错误和RunTimeException(运行时异常)(程序员犯得错误) RE与error属于非受查异常 uncheck Exception中除了RE之外的是受查异常 check 抛Exception的异常时,也要在方法签名时写出来,它包括受查异常就当受查异常处理

是uncheck的,不用写  void method(){ //抛uncheck的异常 }

是check的,方法签名中要写出异常 void method() throws IOException{    //抛check的异常   不在签名中写会飘红 告诉用户掉这个方法有风险 或者自己catch掉就不用写在方法签名中 }

受查异常,必须在方法中加入异常列表 非受查异常,可写可不写,

受查异常:Exception及其子类(不包括RuntimeException)

非受查异常:Error及其子类和RuntimeException及其子类

try(){}  后面有括号,在try中执行完后自动关闭,主要因为try跟那个closeable有关 try(closeable c=new ) 无论是否发生异常,会调用c的close方法

自定义异常类  1.Exception的类  2.RunTimeException的类

异常:  1.通知错误的机制(运行时)  2.两个动作        1.抛出异常(发生错误)        2.铺货异常(错误处理) 3.语法     throw 异常对象;     throw new Exception();     Exception e=new Exception(); throw e;     try{...}catch(Exception e){     //分析 e;     throw e; } 捕获: try必须{ }catch可选(异常类型exc){ }catch可选(异常1|异常2 exc){ }finally可选{ } 异常的匹配从上往下匹配,一旦匹配停止finally是一定会执行到的

try(Closable c=new Scanner(...)){ } 无论是否发生异常,会调用c的close方法

    

 

 

 

 

 

最新回复(0)