java异常解决机制:Exception

java中异常报错如图:

java异常解决机制:Exception_第1张图片

main:表示main方法线程;

java.util.InputMismatchException:表示打印当前异常类型;

下面为可能出错行数,有些还有原因:by:***



java中提供了异常解决机制,帮助处理异常情况:

    异常解决办法:

        第一种:try catch(try catch finally)

        异常解决结构:

try{
    //可能出现异常的代码段
}catch(匹配的异常){
    解决办法//执行的代码段
}
 异常解决执行过程:
     1、先执行try块,如果出现异常,匹配catch中的异常
     2、如果匹配到了,那么执行catch块中的内容
     3、catch中执行之后 程序继续向下运行
     4、如果catch中匹配失败了,那么相当于程序没有当前异常的解决手段,jvm会帮助我们解决该异常
 try-catch异常解决中的注意点:
     1、能够捕获的异常太少了,如果存在大量异常那么还是jvm在解决
     2、catch块中可以通过编写父类 Exception 来捕获try块中的所有异常,但是处理方式过于单一,不推荐使用。
try{
    //可能出现异常的代码段
}catch(匹配的异常){
    解决办法
    //执行的代码段
}catch(匹配的异常){
    解决办法
    //执行的代码段
}catch(匹配的异常){
    解决办法
    //执行的代码段
}

执行顺序:
     1、执行try块中的内容 如果有异常
     2、匹配下面所有catch块 如果匹配到 执行对应catch中的 内容跳过整个try-catch,执行后续代码
     3、如果没有对应的catch匹配, jvm处理该异常
 注意事项:
     1、一般情况下 我们会在多重catch中最后添加一个Exception,拍捕获未知异常,统一处理
     2、Exception捕获应该放到catch最后,因为异常会从第一个catch开始匹配,如果第一个是Exception,那么会导致
          Exception捕获所有异常,因为Exception是所有异常的父类

try{
    //可能出现异常的代码段
}catch(匹配的异常){
    解决办法
    //执行的代码段
}catch(匹配的异常){
    解决办法
    //执行的代码段
}catch(匹配的异常){
    解决办法
    //执行的代码段
    。。。。。
}finally{
    //执行代码
}
执行顺序
    1、执行try块中的内容 如果有异常
    2、匹配下面所有catch块 如果匹配到 执行对应catch中的 内容跳过整个try-catch,执行后续代码
    3、如果没有对应的catch匹配, jvm处理该异常
    4、执行完整个try-catch 最后都会执行finally
 注意事项
    1、finally最后肯定会被执行
    2、return不能阻止finally执行  先执行finally再执行return
    3、如果要强制不执行finally,通过System.exit(0或者是一个非0的数); 0 代表正常退出  非0 非正常退出


        第二种:throws (throw)

            throws: 抛 出很多
   抛出异常,不解决。 解决异常的一种方式,听天由命 统一交由jvm解决
  在方法的形参列表之后 通过 throws 对外抛出异常,这个异常可以是一个 也可以很多。
   throws 抛出运行时异常时  调用该方法是 可以不对抛出的异常进行处理,因为运行时异常只有程序执行期间才能捕获
  
   在方法后添加throws关键词 用来向上抛出异常信息:
           运行时异常:
               调用异常方法时 不会报错 ,所以很难判定是否存在异常。
   检查时异常:
       程序调用时会报错:
       解决方案:
           1、继续向上抛       简单  但是不能解决问题

           2、手动try-catch   复杂 但是用户体验度好 能精准定位到问题出错的地方

               throw:

                    定义在方法里面 和throws一起使用

                    不要将throw产生的异常  try-catch



        很多时候。jdk提供的异常都不满足场景需要,所以需要自己创建一个自定义异常:

            自定义异常:

                1、让当前类继承 Exception

                2、编写空构造器以及带参构造 
               显示的调用父类中的空构造和带参构造


程序异常:所有的异常类都是java.lang.Exception的子类;

       java.util.InputMismatchException:由Scanner抛出,表明获取的标记与期望类型的模式不相匹配,或者该标记超出期望类型的范围。

        java.lang.IllegalStateExceptiom:在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。

        java.lang.ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。

        java.lang.NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:      

            调用 null 对象的实例方法。

            访问或修改 null 对象的字段。

            将 null 作为一个数组,获得其长度。    

            将 null 作为一个数组,访问或修改其时间片。    

            将 null 作为 Throwable 值抛出。 

        java.lang.ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException

            

Object x = new Integer(0);
System.out.println((String)x);


你可能感兴趣的:(学习笔记)