Java学习笔记十五(异常处理机制)

异常处理机制


1、 种类:

       (1) 错误: 与虚拟机有关的,无法恢复或捕获,将导致程序中断。例如系统崩溃、 JVM错误、 动态链接失败。

       (2)   异常: 因编码或外在因素导致,能被处理或者捕获。

       (3)   关系图:          Throwable

                                Error                  Exception

                   VitualMechineError       RunTimeException    - - -    NullPointerException

                   OutOfMemoryError                                                 ArrayOutofBoundException                                          

                   ThreadDeath                                                            ArithneticException

                                                                                                    ClassCastException

扫描二维码关注公众号,回复: 3122536 查看本文章

                                                         IOException

                                                         SQLException


2、 异常分类:

       (1) 非检查型异常: 编译器不要求强制处理,因编码/设计不当引起。RunTimeException及其子类均是。

       (2) 检查型异常:  程序运行时因外界因素导致的,除RunTimeExcepiton外的其它异常。


3、异常处理机制的种类:

       (1) try...catch 捕获异常: 将可能产生异常的代码块放入try中,有错误则跳到catch块中处理。

       (2)   throws声明抛出异常,将异常交给上一级调用处理(则交给虚拟机处理)


4、 try....catch相关的捕获异常:

       (1) try...catch:

                     单catch : try{

                                            }catch(Exception e){

                                                                             }

                     多catch:  try{

                                           }catch(异常1){}

                                            catch(异常2) {}


        (2) try...catch...finally:

                       finally块相当于资源回收语句,必须被执行,一般用来回收物理资源。

        (3) 多异常捕获:

                       try{

                            }catch(异常1|异常2|...  e){

                                                                   }

                       该异常变量默认为常量,程序不能对该异常重新赋值,多catch时异常可以为父子关系或者是同级别关系。

        (4) 自动回收资源try语句:

                       try(声明|初始化资源){} 

        (5) 异常对象常用的方法:

                       getMessage()                  //返回该异常的详细描述字符串(获取错误性质)

                     printStackTrace()  //该异常的跟踪栈信息输出到标准错误输出(指出异常的类型、性质、栈层次和出现的位置)

                       printStackTrace(PrintSteam s)          //          输出到指定输出流

                       getStackTrace()             //返回跟踪栈信息

                       toString()                           //给出异常的类型与性质

                 

5、抛出异常:

         (1) throw  : 真正抛出。    抛出一个异常实例对象且每次一个   多重异常抛出时是先子类再父类

                       throw new 异常();

         (2)throws : 声明抛出。   抛出一个异常序列,只在定义方法内使用

                       public  void  run() throws IOException,Exception{}

                       如果某个方法调用了声明抛出异常的方法,也要声明其声明的异常。

        (3)  子类重写父类的方法时,如果父类的方法有声明(throws)异常,子类的方法可以不声明;也可以声明同一个类型或者是异常的子类型。


6、自定义异常:

           public class  MyException extends Exception{

                       public   MyException(String ErrorMessage){

                                  super(ErrorMessage);

                       }

                       public  AgeException(String msg){  super(msg);}

          }

         调用: throw new MyException();

         自定义异常抛出的例子:

public class MyExceptionDemo{
    public void f() throws MyException{
        System.out.println("Throwing MyException from f());
        throw new MyException();
    }
    public static void main(String[] args){
        MyExceptionDemo sed = new MyExceptionDemo();
        try{
             sed.f();
            }catch(MyException e){
                System.err.println("Caught it");
             }
        }
    }

        输出:Throwing MyException from f()

                  Caught it

一个常用的空指针异常NullPointerException:

         当变量内没有地址信息时,也就是这个变量没有指向任何对象,所以,当访问变量的属性和方法时,相当于在运行代码时出现了null属性、null方法,就会出现异常(null是引用类型的默认值)。

          在编写程序时,判断两个字符串是否相等时,应将不确定存在值的一项放在后面,避免空指针异常。

         if(this.getPassword().equals(Pad.trim()))    当password确定存在而Pad不一定确定时,应该把确定的放在前面

猜你喜欢

转载自blog.csdn.net/weixin_40373090/article/details/80628666