Java Basic Exception

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Basic Exception相关的知识,希望对你有一定的参考价值。

异常处理经验小结之一:不要直接抛出InvocationTargetException  (转http://olylakers.iteye.com/blog/1137371)

在最近一段时间的工作中,积累了几点异常处理的经验,怕时间久了就淡忘了,因此写下本文记录下来,一遍日后总结和查看。

1.在通过反射执行方法的时,如Method.invoke(),如果被反射执行的方法体抛出了Exception,这个异常会被包装成InvocationTargetException重新抛出,下面是jdk里面的源码:

    public Object invoke(Object obj, Object... args)
    throws <span style="color: #ff0000;">IllegalAccessException</span>, IllegalArgumentException,
           InvocationTargetException
    {
       ...........此处省略.....
    }

  比如反射方法里抛出了NullPointException,则Method.invoke方法抛出的是InvocationTargetException,而不是NullPointException,见下面的例子,此处抛出的就是InvocationTargetException。

技术分享

但是InvocationTargetException太过于宽泛,在trouble shouting的时候,不能给人非常直观的信息,所以在处理反射方法异常的时候,我们需要把这个InvocationTargetException的targetException提取处理,重新抛出,因为这个才是对我们分析程序bug真正有帮助的异常:

 

public class InvokeException {  
      
    @SuppressWarnings("null")  
    public void testException(){  
        String nullString = null;  
        nullString.toString();  
    }  
  
    public static void main(String[] args) throws Throwable {  
        // TODO Auto-generated method stub  
  
        try{  
            InvokeException invokeException = new InvokeException();  
            Method method = invokeException.getClass().getMethod("testException");  
            method.invoke(invokeException);  
        }catch (Exception e) {  
            if(e instanceof InvocationTargetException){  
               // throw ((InvocationTargetException) e).getTargetException();  The Throwable.getCause() method is now the preferred means of obtaining this information.
               e.getCause()
            }else{  
                throw e;
            }  
        }  
    }  
}  

 

以上是关于Java Basic Exception的主要内容,如果未能解决你的问题,请参考以下文章

text Visual Basic代码片段

Visual Basic.Net 2010 Exception 错误含义

使用java.lang.Exception的错误:测试类应该只有一个公共构造函数

[未解决问题记录]python asyncio+aiohttp出现Exception ignored:RuntimeError('Event loop is closed')(代码片段

PAT Basic 1049

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'dll