zoukankan      html  css  js  c++  java
  • Java基础之异常处理机制

    在Java中,异常分为编译时异常和运行时异常。


    编译时异常又叫编译时被监测的异常:在程序编译过程中监测到非运行时异常的异常,出现该异常要么向上抛出,要么捕获处理。
    运行时异常(runtimeException及其子类):在程序编译过程中监测到出现运行时异常,函数上或内部可以直接抛出异常,不需要捕获和声明。

    编译时异常:
      在某个方法中,try中出现异常,会将异常信息封装成一个对应异常信息的异常对象(new Exception),然后在catch中将这个异常对象进行捕获,然后进行异常的处理。


      在main方法中,如果出现异常,如果没有进行异常处理,或者在异常处理中又出现异常的抛出,当异常一层层的往上抛,却没有得到解决时,最终会抛给 JVM,JVM会将异常执行默认的异常处理机制。

    public static void main(String[] args)throws Exception{
    		try{
    			throw new Exception("1");
    		}catch(IOException e){
    			throw new Exception("2");
    		}catch(Exception e){
    			throw new Exception("3");
    		}finally{
    			throw new Exception("4");
    		}
    	}
    

      这段代码的最终结果是:4。

      因为finally最终会被执行,如果将finally去掉,那么会打印出3,因为3最终是抛给JVM了,JVM会使用默认的方式进行打印输出。

      在上段main方法中,出现throws和throw,两者的区别是throws使用在函数上,后面可跟多个异常。throw使用函数内,后面跟一个异常对象(new Exception)

      两者的相同点是都需要进行异常的捕获处理。

      多异常的处理(编译时异常):

        1、声明异常时,建议声明更为具体的异常,这样处理也会更具体.
            多个异常处理,多个catch捕获
        2、对方声明多个异常,就对应有多个catch快
            如果多个catch快中的异常出现继承关系,父类catch(Exception)快放最下面。
        3、多异常处理中,程序一次只处理一个异常。
         在多异常的处理中,如果在一个方法中出现了异常,那么程序会在编译时监测到第一个异常时,就会触发异常的处理机制,

        去程序中查到对应该异常的异常捕获快(catch)。

    注意:当某个语句出现异常,该语句调用的方法应该声明异常抛出,之后该语句应该捕获异常(try-catch),或者将该语句所在的方法上抛出异常(throws)。抛给JVM去处理。

    运行时异常(RuntimeException):

      Exception中有一个特殊的子类异常RuntimeException运行时异常。

      1、如果在函数内容抛出异常,函数上可以不用声明,编译一样通过。

      2、如果在函数上声明了该异常,调用者可以不用进行处理,编译一样也通过。

          之所以不用在函数上声明,是因为不需要让调用者去处理。

      3、当该异常发生,其实是希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,程序员会代码进行修正。

    public class ExceptionDemo {
    	
    	private static double div(int i, int j) {
    		if(j <= 0){
    			throw new ArithmeticException();
    		}
    		double resoult = i/j;
    		return resoult;
    	}
    	
    	public static void main(String[] args){
    		int i = 4,j=0;
    		double x = div(i,j);
    		System.out.println("x= "+x);
    	}
    

      在上段代码中声明了ArithmeticException异常,该异常时RunnableException异常的子类。

      也可以将ArithmeticException异常换成我们自己定义的异常(OtherException )。当使用自定义异常时,如果该异常的发生,无法继续进行运算,就让自定义异常继承RunnableException

    public class OtherException extends RuntimeException{
    	
    	public OtherException() {
    		System.out.println("自定义异常执行了");
    	}
    
    }
    

      

  • 相关阅读:
    编辑文章
    POJ_1195 Mobile phones 【二维树状数组】
    WCF探索之旅(三)——IIS公布WCF服务
    doT.js具体使用介绍
    数据结构:最小生成树--Kruskal算法
    关于打开sdk下载不了的最优秀解决方式
    JS 之 数据类型转换
    MongoDB学习笔记&lt;六&gt;
    Spring、Hibernate 数据不能插入到数据库问题解决
    Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现
  • 原文地址:https://www.cnblogs.com/MoreThinking/p/6892966.html
Copyright © 2011-2022 走看看