尝试 - 双Catch语句Java

问题描述:

我有一个问题,不理解我从我的try - catch语句,它有两个渔获得的错误消息。尝试 - 双Catch语句Java

我相信一切是正确的,但是,我得到一个错误exception X is never thrown in body of corresponding try statement.

我相信代码是正确的,但两者的catch子句被拒绝!

@PUT 
@Path("{id}") 
@Consumes("application/json") 
public Response updatePerson(@PathParam("id") int id, String is) { 
    try { 
     Person person = readPerson(is); 
     person.setId(id); 
     Person locPerson = persons.get(id); 
     if(locPerson == null){ 
      throw new WebApplicationException(Response.Status.NOT_FOUND); 
     } 
     persons.put(person.getId(), person); 

     return Response.status(Response.Status.OK).build(); 
    } catch (JSONException e) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } catch (ParseException e) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 
+0

难道只有Java或JSON包容???请添加适当的标签。 – 2014-11-06 18:48:55

+0

它看起来像jsonexception或parseexception永远不会扔在你的尝试块这就是为什么ide抱怨agaist它 – DeepInJava 2014-11-06 18:50:32

+0

请,当你收到一条错误消息时,不要编辑或修改它时张贴在这里。用'X'代替编译器抱怨的异常名称。这是一个很大的禁忌。永远不要模糊错误消息的关键部分(删除敏感文本_you_发起是好的,但就是这些)。 – 2014-11-06 18:58:34

如果没有叫你try块的方法可能抛出JSONException或ParseException的,你不应该赶上这些例外。这就是exception X is never thrown in body of corresponding try statement的含义。

+0

如果通过使用泛型或其他方式,某个方法可能会抛出一个未通过'throws'子句指定的异常(在将方法传递给另一个方法时可能需要执行该方法,并且传递的方法可能会抛出一个检查的异常应该通过另一个过滤)是否有任何“好”的方法来捕捉这些异常? – supercat 2014-11-06 21:21:39

+0

@supercat我不认为一个方法可以抛出一个没有在'throws'子句中指定的检查异常。如果您将方法传递给另一个将执行该方法的方法,则执行传递方法的方法必须处理所传递的方法可能抛出的所有已检查的异常(或将它们声明在自己的'throws'子句中)。 – Eran 2014-11-06 21:25:52

这意味着你正在试图赶上例外是永远不会try块内被抛出,所以其冗余有它在catch语句 - >警告当作错误