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;
            }
        }
    }
}  
时间: 2024-12-28 16:47:10

Java Basic Exception的相关文章

oracle10g登录em后,提示“java.lang.Exception: Exception in sending Request :: null”

出现错误时登录企业管理器时出现的界面 出现这种错误一般是因为没有设置时区,一般默认的是agentTZRegion=GMT,也就是GMT.所以大家只要设置了这个东西,然后重新启动dbconsole就可以了.下面是设置以及重新启动dbconsole的全过程. 第一步,在Oracle安装目录中找打这个文件emd.properties(以往大家都是找不到这个文件在哪里),D:\oracle\product\10.2.0\db_1\PC-20111014FOHC_orcl\sysman\config,我的

java.lang.Exception: Socket bind failed: [730048]

严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:576) at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprP

Java:Exception

异常: 就是程序在运行时出现不正常的情况. 异常的由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象.其实就是Java对不正常情况进行描述后的对象的体现. 两种问题: 严重问题(Error).非严重问题(Exception). Error和Exception具有一些共性内容.(都是Throwable的子类) try { 需要被检测的代码 } catch(异常类 变量) { 处理异常的代码:(处理方式) } 严重问题: Java通过Error类进行描述.对于

java.lang.Exception: Socket bind failed

1.错误描述 严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"] java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:4

Java的Exception和Error面试题10问10答

在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它成为面试题中的常客.关于Java中Error和Exception的面试题目多是关于Exception和Error的概念,如何处理Exception,以及 处理Exception时需要遵守的最佳实践等等.尽管关于多线程.垃圾回收.JVM概念和面向对象设计等方面的问题依然主宰着这类面试,你仍然需要为回答

启动tomcat报错 java.lang.Exception: Socket bind failed

严重: Error initializing endpointjava.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:647) at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprPr

java异常处理Exception

我看别人的面经中有一道题目就问到了Exception,即java的异常处理的,我以前也学了java的异常处理,但是我查了下,看了别人的博客关于写的exception异常处理,我发现,自己学的不牢固,只学到了一点皮毛而已,在看了那么多博客和资料后,我做下总结吧,不然我大脑都混乱了. java的中异常祖先是Throwable,Throwable的直接子类是Exception和Error. Error通过单词我们就知道,是错误的意思,这种错误一般是jvm运行产生的错误,出现这种错误,我们的程序不能解决

浅谈java异常[Exception]

本文转自:focusJ 一. 异常的定义 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也

Chapter 2 Java Basic Grammar

This week , we hava studied chapter2 Java Basic Grammar. I painted a draw to help myself to remember this chapter better.