网站怎样做推广计划,品牌设计公司排行榜,大数据营销的运营方式有哪些,网站建设首先要选择题Java中允许对异常进行再次抛出#xff0c;以提交给上一层进行处理#xff0c;最为明显的例子为Java的常规异常。 常规异常#xff1a;有Java所定义的异常#xff0c;不需要异常声明#xff0c;在未被try-catch的情况下#xff0c;会被默认上报到main()方法。 Example: pu…Java中允许对异常进行再次抛出以提交给上一层进行处理最为明显的例子为Java的常规异常。 常规异常有Java所定义的异常不需要异常声明在未被try-catch的情况下会被默认上报到main()方法。 Example: public class TestException {TestException(int i) throws ExceptionA,ExceptionB{int a[]{0,}; a[1]1;}
} 当从main方法中调用TestException类的构造函数的时候会得到以下的异常提示从中可以看出异常的冒泡机制这是一个栈信息。 异常的冒泡上传机制当一个异常对象产生了以后其会按照调用层次一般是方法的调用层次进行冒泡直到被try-catch处理或上报至main()方法有编译器进行提示。 Example: firstThrow()提示错误的原因为, firstThrow()的函数声明中包括了MyException的异常声明而secondThrow()中调用了firstThrow()却未对可能抛出的异常对象提供任何处理方案这是编译器所不能允许发生的事情。这也是为了保证底层异常对象在冒泡过程中能得到合适的处理和重视 注意此截图中MyEclipse提供了两种方式帮助fix这个程序这两种方式常用的异常应对手段 1、本方法不给予处理将异常上报给上一层。 1 public class TestExceptionChain {2 void firstThrow() throws MyException3 {4 print(Oringinally creat a MyException and throw it out);5 throw new MyException();6 7 }8 void secondThrow() throws MyException9 {
10 firstThrow();
11 }
12 TestExceptionChain() throws MyException{
13 secondThrow();
14 }
15 } 1 public static void main(String[] args) {2 try{3 4 TestExceptionChain testExceptionChainnew TestExceptionChain();5 }6 catch(MyException e)7 {8 e.printStackTrace();9 print(Catch a my exception!);
10 }
11
12 } 控制台的输出为 从异常栈的记录信息可以发现与代码相对应的异常抛出机制和次序 firstThrow()产生MyException对象-异常冒泡至调用其的secondThrow()-异常冒泡至调用secondThrow()的TestExceptionChain的构造方法-冒泡至printtry的main()方法。 注意到异常对象一直被抛出直至在printtry的mian()方法中被try-catch捕获 2、try-catch方式捕捉上报的异常而后进行相应处理或抛出另一异常。 2、1捕获异常后进行相应处理。 Example: 1 public class TestExceptionChain {2 void firstThrow() throws MyException3 {4 print(Oringinally creat a MyException and throw it out);5 throw new MyException();6 }7 void secondThrow()8 {9 try
10 {
11 firstThrow();
12 }
13 catch (MyException e)
14 {
15 print(I have just caught a MyExcepton,but i want to do nothing for it);
16 e.printStackTrace();
17 }
18 }
19 TestExceptionChain(){
20 secondThrow();
21 } 从图中可以发现异常在secondThrow() 中被try-catch模块捕获并执行了相应的处理操作所以其函数声明中无需添加异常声明异常不会被上报。 故mian()方法被改写成了以下的代码 1 TestExceptionChain testExceptionChainnew TestExceptionChain(); 注意此处异常栈的信息表示的是异常产生的层次信息并非异常信息的上报层次因为其已经在secondThorow()中被捕获处理。 2.2 捕获异常后抛出另一个异常。 Example: 1 public class TestExceptionChain {2 void firstThrow() throws MyException3 {4 print(Oringinally creat a MyException and throw it out);5 throw new MyException();6 }7 void secondThrow() throws YouException8 {9 try
10 {
11 firstThrow();
12 }
13 catch (MyException e)
14 {
15 print(I have just caught a MyExcepton,but i want to create a YouException and throw it out);
16 e.printStackTrace();
17 throw new YouException();
18 }
19 }
20 TestExceptionChain() throws YouException{
21 secondThrow();
22 }
23 }
24 class MyException extends Exception{}
25 class YouException extends Exception{} 从异常栈信息中可以发现新抛出的YouException对象是从secondThrow()中开始的。 *Java中还提供了fillInStackTrace()方法用于对捕获的异常的栈信息进行重写。 Example: 1 try{2 3 TestExceptionChain testExceptionChainnew TestExceptionChain();4 }5 catch(YouException e)6 {7 print(Catch a YouException!);8 e.fillInStackTrace();9 e.printStackTrace();
10
11 } 由于使用了fillInstack()方法关于YouException的异常信息被重写从其被从写处重新记录 转载于:https://www.cnblogs.com/airwindow/archive/2012/06/26/2564123.html