如何转移网站,亚马逊雨林属于哪个国家的,微网站模板 餐饮,网络营销方式和消费者群体之间的关系一、概念 “异常”这个词有“我对此感到意外”的意思。问题出现了#xff0c;你也许并不清楚该如何处理#xff0c;但你的确知道不应该置之不理#xff1b;你要停下来#xff0c;看看是不是有别人或在别的地方#xff0c;能够处理这个问题。只是在当前的环境中还没有足够…一、概念 “异常”这个词有“我对此感到意外”的意思。问题出现了你也许并不清楚该如何处理但你的确知道不应该置之不理你要停下来看看是不是有别人或在别的地方能够处理这个问题。只是在当前的环境中还没有足够的信息来解决这个问题所以就把这个问题提交到一个更高级别的环境中在这里将作出正确的决定。二、基本知识 2.1 基本异常 当抛出异常后首先同Java中其它的对象创建一样将使用 new在堆上创建异常对象。然后当前的执行路径它不能继续下去了被终止并且从当前环境中弹出对异常对象的引用。此时异常处理机制接管程序并开始寻找一个恰当的地方来继续执行程序。这个恰当的地方就是异常处理程序它的任务是将程序从错误状态中恢复以使程序能要么换一种方式运行要么继续运行下去。异常允许我们如果没有其它手段强制程序停止运行并告诉我们出现了什么问题或者理想状态下强制程序处理问题并返回到稳定状态。 在基本异常的基础之上我们还需要知道异常的参数 我们总是用 new 在堆上创建异常对象这也伴随着存储空间的分配和构造器的调用。所有标准异常类都有两个构造器一个是默认构造器另一个是接受字符串作为参数以便能把相关信息放入异常对象的构造器 throw new NullpointerException(t null ); 在使用 new 创建异常对象之后此对象的引用将传给 throw。将会返回一个异常对象然后退出方法或作用域。能够抛出任意类型的Throwable对象它是异常类型的根类。通常对于不同类型的错误要抛出相应的异常。错误信息可以保存在异常对象内部或者使用异常类的名称来暗示。上一层环境通过这些信息来决定如何处理异常。通常异常对象中仅有的信息就是异常类型除此之外不包含任何有意义的内容。2.2 捕获异常 try 块捕获异常 如果在方法内部抛出了异常或者在方法内部调用的其他方法抛出了异常这个方法将在抛出异常的过程中结束。要是不希望方法就此结束可以在方法内设置一个特殊的块来捕获异常。 catch块处理异常 当然抛出的异常必须在某处得到处理。这个“地点”就是异常处理程序而且针对每个要捕获的异常得准备相应的处理程序。异常处理程序紧跟在 try 块之后以关键字 catch 表示 try{//Code that might generate exceptions
}catch(Type1 id1){//handle exceptions of Type1
}catch(Type2 id2){//handle exceptions of Type2
}
//etc... 异常处理程序必须紧跟在 try 块之后。当异常被抛出时异常处理机制将负责搜寻参数与异常类型相匹配的第一个处理程序。然后进入 catch 子句执行此时认为异常得到了处理。一旦 catch 子句结束则处理程序的查找过程结束。注意只有匹配的 catch 子句才能得到执行。 两种异常处理模型 终止模型、恢复模型 终止模型 一旦异常被抛出就表明错误已经无法挽回也不能回来继续执行。 恢复模型 异常处理程序的工作是修正错误然后重新尝试调出问题的方法并认为第二次能成功。 该种模型时不能再遇见错误时就抛出异常而是调用方法来修正或者把try块放在while循环里这样不断的进入try块直到得到满意的结果。 2.3 创建自定义异常 通过自定义MyException继承自Exception来创建自定义的异常。 class MyException extends Exception{public MyException(){}public MyException(String in){super(in);}
} 并在catch中通过 e.printStackTrace() 将异常写入到System.err(标准错误流)在debug的时候会显示错误的函数和行号这是对System.out的优势。 它将打印“从方法调用处直到异常抛出处”的方法调用序列 栈轨迹 printStackTrace方法也可以通过getStackTrace()方法来访问这个方法将返回一个由栈轨迹中的元素构成的数组其中每一个元素都将表示栈中的一帧。 元素0是栈顶元素并且是调用序列中的最后一个方法调用。 通过如下代码打印 栈轨迹 try {f();} catch (MyException e) {// e.printStackTrace();for(StackTraceElement ste : e.getStackTrace()){Log.d(TAG, onClick: ste.getMethodName());}} 得到的结果如下 2.4 异常说明 如果调用某个方法方法里的代码产生了异常却没有进行处理编译器会发现这个问题 要么处理这个异常要么在函数异常说明中表明此方法将产生异常。 如下图所示 1、函数声明加 throws MyException 2、函数中 增加 try catch 处理异常。 2.5 try catch中有returnfinal 当try/catch代码中有return语句那么此时的final是否还会继续执行 1、 当try catch中有return 语句在执行return之前将需要return的结果保存在一个临时变量中然后去执行finally代码块执行完之后再执行return。 2、 1中情况有个前提条件是finally中没有return语句如果finally代码块中也有return那么会执行finally中的return不会执行try/catch中的。 int testFinallyReturn(){int x 1;try{x;return x;}catch (Exception e){return x;}finally {x;return x;}}运行结果if(exist(return x) in finally){ return result : 2 ;}else{ return result : 3 ;} 转载于:https://www.cnblogs.com/NeilZhang/p/7639546.html