java中的异常及异常处理

  1. java中全部异常类都继承Throwable类,Throwable主要有两个子类,为Error 和 Exception。java

  2. Error 主要为虚拟机错误(VirtualMachineError)和线程死锁(ThreadDeath)。若是出现了Error错误,意味着程序崩溃了。数组

  3. Exception 通常指编码、环境、用户操做输入出现了问题。Exception主要分两类,RuntimeException(非检查异常)和检查异常。引发RuntimeException的缘由有不少,好比引用了一个空对象的属性或方法(NullPointerException),也有多是数组访问越界(ArrayIndexOutOfBoundsException)或者是错误的类型转换(ClassCastException),还有算术方面的错误(ArithmeticException)。此类异常由java虚拟机抛出并处理,出现运行时异常通常是代码自己有问题,应该从逻辑方面来改进代码。引发检查异常的缘由也不少:好比说文件异常(IOException)、SQL异常(SQLException). 此类异常须要手动添加处理代码,java虚拟机不处理。编码

  4. 异常处理:线程

    1. try...catch:若是try中的语句出现异常,程序的控制权将被移交给catch块中的一场处理程序。咱们能够在一个try后面输入多个catch块,来主要不一样异常。catch块的书写顺序要按从小到大的顺序来写。如:ArithmeticException-->Exception.code

    2. try...catch...finally:finally中输入最终要执行的代码。无论有没有发生异常都会执行finally里的语句。
      对象

    5.java中的异常抛出以及自定义异常继承

        a.异常抛出
资源

            i.throw : 讲产生的异常抛出(动做)
虚拟机

            ii.throws :写在方法名或者方法的参数表以后,在方法体以前。
it

              

  public void 方法名(参数列表) throws 异常列表{
                    throw new Exception();                                
                }

        b.自定义异常

            

class 自定义异常类 extends 异常类型{};

           

 public class DrunkException extends Exception{
                public DrunkException(){}
                public DrunkException(String message){
                    super(message);
                }
            }

    6.java中的异常链

       

public class ChainException(){
            public static void main(String args[]){
                ChainException ce = new ChainException();
                try{
                    ce.test2();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        public void test1() throws DrunkException{
            throw new DrunkException("喝酒别开车");
        }
        public void test2(){
            try{
                test1();
            }catch(DrunkException e){
                RuntimeException runExce = new RunctimeException("司机一滴酒,亲人两行泪 ~~");
                runExce.initCause(e);
                //或者
                RuntimeException runExce = new RunctimeException(e);
                
                throw runExce;
            }
         
        }
        
     }

    7.总结:

        a.处理运行时异常,采用逻辑去合理规避同时辅助try-catch语句。

        b.在多重catch以后,加上catch(Exception e)来处理可能会被遗漏的异常。

        c.对于不肯定的代码,也能够加上try-catch,处理潜在的异常。

        d.尽可能去处理异常,切忌只是简单的调用printStackTrace()去打印异常。

        e.具体若是处理异常,要根据不一样业务需求和异常类型去决定。

        f.尽可能添加finally语句块,来释放占用的资源。

相关文章
相关标签/搜索