• 异常总结


    所有的异常都是 Throwable 的子类!

    而在 Throwable 下有两个子类:

    Error 和 Exception ! 请解释区别?

    Error:指的是JVM错误! 即:此时的程序还没有执行!如果没有执行用户无法处理!
    Exception:指的是程序运行中产生的异常!用户可以处理!

    所谓的异常处理指的是所有Exception以及它的子类异常!

    异常处理流程:

    1.当程序在运行的过程之中出现异常之后,JVM会自动根据异常的类型产生实例化一个与之类型匹配的异常对象
    (用户不用关心new,由系统自动负责处理)!

    2.产生了异常对象之后会判断当前的语句上是否存在异常处理,如果没有异常处理,就会交给JVM进行默认的异常处理!
    处理的方式:输出异常信息,而后结束程序的调用!

    3.如果此时存在由异常的捕获操作,会由try语句来捕获产生的异常类实例化对象,而后与try语句后的每一个catch进行比较!
    如果现在有符合的catch捕获类型,则使用当前catch的语句来进行处理,如果不匹配,则向下继续匹配其它的catch!

    4.不管最后异常处理是否能够匹配,都要向后执行,如果此时程序中存在finally语句,先执行finally中的代码
    但是执行完毕后需要根据之前的catch匹配结果来决定如何执行,如果之前捕获成功,就继续执行finally之后的代码
    如果没有捕获成功,就将此异常交给JVM进行默认处理(输出异常信息,而后结束程序执行)!

    整个过程就好比方法重载!根据catch后面的参数类型进行匹配,但是所有的Java对象都存在自动向上转型操作支持!
    简单的做法是 匹配它们的父类Exception处理就ok!

    使用Exception捕获异常:

    1. 在编写多个catch捕获异常时,捕获范围大的异常要放在后面!

    2.虽然直接捕获比较方便,但也有缺点!因为所有的异常都会按照同样一种方式处理!
    在一些要求严格的项目里,异常一定要分开处理!

    throws关键字:

    throws关键字主要用于方法的声明上,指的是方法之中出现异常后交给被调用处处理!

    调用了使用throws声明的方法之后,不管操作是否出现异常,都必须使用try...catch进行处理!

    如果在main()使用throws抛出异常,异常将交给JVM进行处理,采用默认的处理方式,输出异常信息,而后结束程序调用!

    主方法上不要使用throws,因为如果程序出错,也希望可以正常执行结束调用!

    throw关键字:

    在程序之中可以直接使用throw手工的抛出一个异常类的实例化对象!

    解释throw 和 throws 的区别?

    throw:指的是在方法之中人为抛出一个异常对象(这个异常类对象可能是自己实例化或者是抛出已经存在的)!

    throws:在方法声明上使用,表示此方法在调用时必须处理异常!

    异常的使用格式:

    代码:

    class MyMath {
    	// 此时div()方法上如果出现异常交给被调用处处理
    	public static int div(int x,int y) throws Exception{
    		int result = 0;
    		System.out.println("***1.除法计算开始***");
    		try {
    			result = x/y;
    		} catch (Exception e) {
    			throw e; // 继续抛出异常
    		} finally {
    			System.out.println("***2.除法计算结束***");
    		}
    		return result;
    	}
    }
    public class Demo {
    	public static void main(String[] args) {
    		try {
    			System.out.println(MyMath.div(10, 0));
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      

    RuntimeException类:(运行时异常)

    在Java中为了方便用户编写代码,专门提供一种RuntimeException类!这种异常类最大的特征是:
    程序在编译的时候不会强制性的要求用户处理异常,用户了可以根据自己的需要选择型的进行处理!
    但是如果没有处理又发生异常了,将交给JVM进行默认的处理!
    也就是说RuntimeException的子异常类,可以根据用户需要选择进行处理!

    请解释Exception 和 RuntimeException 的区别?

    Exception 是 RuntimeException的父类,使用Exception定义的异常必须要被处理,而RuntimeException的异常可以选择性得到进行处理!

    Exception(强制处理!)、RuntimeException(选择处理!)

    请列举出几个常见的 RuntimeException 类?

    ArithmeticException NullPointerException ClassCastException

    assert关键字:

    主要功能是进行 断言!

    Java中的断言指的是程序执行到某行代码处时一定是预期的结果!

    默认情况下断言是不应该影响程序运行的,也就说在Java解释程序的时候,断言是默认不起作用的!

    启用断言: java -ea Demo

    public class Demo {
    	public static void main(String[] args) {
    		int num = 10;
    		// 中间可能经了20行代码来操作num的内容
    		// 期望中的内容应该是20
    		assert num == 20 : "num的内容不是20";
    		System.out.println("num="+num);
    	}
    }
    

      

    自定义异常:

    虽然Java中提供了大量的异常,但是在实际开发中往往不够用!

    例如:AddException

    class AddException extends Exception {
    	public AddException(String msg){
    		super(msg);
    	}
    }
    public class Demo {
    	public static void main(String[] args) {
    		int num = 20;
    		try {
    			if(num > 10){ // 出现错误,英爱产生异常
    				throw new AddException("数值传递过大!");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      

    总结:

    1.Exception的父类是Throwable,但是在编写代码的时候尽量不要使用Throwable,因为Throwable下还包含对了Error子类!
    我们能够处理的只有Exception子类!

    2.异常处理的标准格式:try,catch,finally,throw,throws;

    3.RuntimeException 和 Exception 的区别!

  • 相关阅读:
    单向循环列表(Java实现)
    单链表的实现(Java实现)
    二分查找法(Java实现)
    六大排序算法(Java实现)
    学习python第十天
    学习python第九天
    MapNode
    AtomicReference
    AtomicStampedReference
    尾递归(TailRecursion)
  • 原文地址:https://www.cnblogs.com/9513-/p/7435928.html
Copyright © 2020-2023  润新知