java中的异常及异常处理

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

  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.

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

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

        a.异常抛出

            i.throw : 讲产生的异常抛出(动作)

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

              

  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语句块,来释放占用的资源。




你可能感兴趣的:(java异常处理)