2022-7-29 第八组 曹雨

异常

  • 类型转换异常
  • 数字格式化
  • 算数异常

编程界:

  • 除数为0;
  • IO流,没有关闭
  • 停电

当一个程序抛出异常时,抛异常后面的语句不再执行,类似于return的功能,终止方法的执行。

try..catch:

        try{
        //把有可能抛异常的代码放在try语句块里
   }catch(Exception e){
      //打印异常信息。
      e.printStackTrace(".....");
    
   }

一旦出现异常,就会跳到catch。可以说就把这个异常解决了。
跳到catch后,后面的代码正常走。
如果有代码特别重要,无论如何都得走,可以放在try catch外面。
为了应对多中异常,可以写很多catch来应对。但是有顺序,小的写上面,大的写在最下面。

异常的继承体系结构。

最顶级的异常类Thorwable:

已知子类:

错误Error:正常情况下,不太可能出现的。绝大多数的Error都会导致程序处于非正常的状态下,很难恢复。一般就是你代码写错了

异常Exception:在Java语言中,将程序执行中发生的不正常的情况称之为异常。

异常又可以分为:

  • Exception编译期异常:写代码的时候抛异常,如果编译器不解决,会编译不通过,一直爆红。
    在一个语句块中,如果使用throw抛出一个编译期异常,就必须在方法的声明处使用throws关键字
    或者直接使用try catch
  • RuntimeException运行期1c 异常:只在运行时抛异常。

自定义异常:

Java中异常机制,但是结合实施业务。

  • 所有异常必须是Throwable的子类(大材小用)
  • 如果要定义一个编译型异常,需要继承Exception类
  • 如果要定义一个运行期异常

throws语句可以当作一种返回值

异常链

一个异常被抛出去后,会继续被调用这个方法的方法捕获或抛出,异常会扩散。

     //A有异常,B调用A,C调用B
       class A{
      public void a(){
      throw new ServiceException("业务异常")
    }     
  }
    class B
      public void b(){
      A aa = new A();
      aa.a();
    }     
  }
    class C{
      public void c(){
      B bb = new B();
      bb.b{}
    }     
  }

我们要在B里用try catch把异常干掉:

      try{
    aa.a()
  }catch(){
    
  }

只要处理异常/把异常解决掉,就时try catch。

如果一个方法没有捕获一个编译器异常,该方法必须是使用throws来声明。
throws很不负责任

      public class Ch2 {
    //show()抛了一个异常
    public void show()throws Exception {

    }
    //如果info()不管,继续抛
    public  void info() throws Exception{
        show();
    }

    //只能让主方法管
    public static void main(String[] args) {
        try {
            new  Ch2().info();
         } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

面试题:throws 和throw区别:

thorws:

  • 用在方法声明之后,跟的是异常类名
  • 表示声明异常,由该方法的调用者来处理
  • 表示出现该异常可能性,并不一定会发生异常

throw:

  • 用在方法体内,跟的异常对象名(new Exxxx())
  • 表示抛出异常,由方法体内的语句来处理
  • 执行throw一定抛出了某种异常

finally关键字

try...catch...finally

作用:

  • 无论是否发生异常,finally中的代码块一定会执行,一般用来释放内存。
catch可以写多个,有顺序问题。先写小的,再写大的

面试题:try , return finally三者的执行顺序。

答案:finally在最后执行,如果有return,return最后执行

重写方法不能抛出比被重写方法更大的异常

        interface Inter01;
      public void show() throws Exception;
      //重写方法抛出比被重写方法更大的异常类型
      public class Q1 implements Inter01{ 
      public void show() throws Exception;
  
    }

posted on   figh466  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示