How to know which exception is thrown

前端 未结 4 858
清歌不尽
清歌不尽 2021-02-03 11:29

I\'m doing a review for our codebase, and there are many statements like this:

try
{
   doSomething()
} catch (Exception e)
{

}

but I would l

4条回答
  •  误落风尘
    2021-02-03 12:22

    If there's no throws statement in doSomething (e.g. doSomething() throws IOException), any exceptions that will occur will be an instance of RuntimeException. If you want to know the exact class of an exception thrown by doSomething, you can always try

    try {
       doSomething();
    } catch (RuntimeException e){
       System.out.println(e.getClass().getName());
    }
    

    Knowing which runtime exceptions can be thrown without actually running the program is difficult. Even if none of the code that doSomething() calls has an explicit throw, core java operations can always throw NullPointerException, ArrayIndexOutOfBoundsException, etc with the wrong input. Here are some ideas:

    • Dig through manually. At least you will know some of the exceptions.
    • Use reflection to find any throw statements accessible from doSomething.
    • Run your test cases and log the exceptions thrown like above. Good tests will reveal the important errors that callers of doSomething should be ready for.
    • Go to the people who put the catch there in the first place

    In any case it's usually a good idea to catch exceptions that are as specific as possible, since you don't know exactly what went wrong when you try to deal with all cases in one clause.

提交回复
热议问题