关与 重新抛出异常的问题
麻烦大家看2个小程序
一:通过方法printStackTrace(),看出重新抛出异常对象,起调用栈信息不变
package mytool;
class MyException extends Exception
{
}
class ReThrowing
{
public void f() throws MyException
{
throw new MyException();
}
public void g() throws MyException
{
try
{
f();
}
catch(MyException myE)
{
System.err.println("catch MyException from f()");
myE.printStackTrace();
throw myE;
}
}
}
public class ToTestRethrowing
{
public static void main(String[] args)
{
ReThrowing a = new ReThrowing();
try
{
a.g();
}
catch(MyException myEe)
{
System.err.println("catch MyException from g()");
myEe.printStackTrace();
}
}
}
二:通过fillInStackTrace()刷新调用栈信息
package mytool;
class MyException extends Exception
{
}
class ReThrowing
{
public void f() throws MyException
{
throw new MyException();
}
public void g() throws Throwable
{
try
{
f();
}
catch(MyException myE)
{
System.err.println("catch MyException from f()");
myE.printStackTrace();
throw myE.fillInStackTrace();
}
}
}
public class ToTestRethrowing
{
public static void main(String[] args) throws Throwable
{
ReThrowing a = new ReThrowing();
try
{
a.g();
}
catch(MyException myEe)
{
System.err.println("catch MyException from g()");
myEe.printStackTrace();
}
}
}
问题: fillInStackTrace()返回的是Trowable对象,应该将方法g()异常声明由MyException改为Trowable即可,mian()方法并不需要抛出异常(如程序一),在程序二中为什么要在main()方法上进行异常声明?
一:通过方法printStackTrace(),看出重新抛出异常对象,起调用栈信息不变
package mytool;
class MyException extends Exception
{
}
class ReThrowing
{
public void f() throws MyException
{
throw new MyException();
}
public void g() throws MyException
{
try
{
f();
}
catch(MyException myE)
{
System.err.println("catch MyException from f()");
myE.printStackTrace();
throw myE;
}
}
}
public class ToTestRethrowing
{
public static void main(String[] args)
{
ReThrowing a = new ReThrowing();
try
{
a.g();
}
catch(MyException myEe)
{
System.err.println("catch MyException from g()");
myEe.printStackTrace();
}
}
}
二:通过fillInStackTrace()刷新调用栈信息
package mytool;
class MyException extends Exception
{
}
class ReThrowing
{
public void f() throws MyException
{
throw new MyException();
}
public void g() throws Throwable
{
try
{
f();
}
catch(MyException myE)
{
System.err.println("catch MyException from f()");
myE.printStackTrace();
throw myE.fillInStackTrace();
}
}
}
public class ToTestRethrowing
{
public static void main(String[] args) throws Throwable
{
ReThrowing a = new ReThrowing();
try
{
a.g();
}
catch(MyException myEe)
{
System.err.println("catch MyException from g()");
myEe.printStackTrace();
}
}
}
问题: fillInStackTrace()返回的是Trowable对象,应该将方法g()异常声明由MyException改为Trowable即可,mian()方法并不需要抛出异常(如程序一),在程序二中为什么要在main()方法上进行异常声明?
...全文
相关推荐
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws
"异常捕获与抛出的问题,什么时候应该try,什么时候应该throws"在 Java 中,捕获异常和抛出异常是两种不同的机制,分别用于处理不同的异常场景。
浅谈python抛出异常、自定义异常, 传递异常
"本文主要探讨了Python中的异常处理机制,包括抛出异常、传递异常以及自定义异常。通过示例代码解释了`raise`关键字的使用,以及如何在捕获异常后重新抛出异常。此外,还提到了自定义异常的方法,即
浅谈java中异常抛出后代码是否会继续执行
使用finally:无论是否发生异常,finally块中的代码总是会被执行,常用于资源清理。4. 抛出异常:在catch块中,可以重新抛出异常,让调用者处理。
抛出异常代码示例
#### 四、部分代码内容解析:虽然提供的部分内容并没有直接包含异常抛出的代码示例,但从上下文推测,这部分内容可能与一个简单的数组访问示例有关。
C#中抛出异常用法实例
**throw;与throw ex** 当在`catch`块中重新抛出异常时,推荐使用`throw;`而不是`throw ex;`。


Java SE
