Java Try-Double-Catch语句

Java Try-Double-Catch语句,java,exception-handling,Java,Exception Handling,我无法理解从try-catch语句中得到的错误消息,该语句有两个捕获 我相信一切都是正确的,但是,我得到了一个错误异常X从未在相应的try语句体中抛出。 我相信代码是正确的,但是两个catch子句都被拒绝了 @PUT @Path("{id}") @Consumes("application/json") public Response updatePerson(@PathParam("id") int id, String is) { try { Person perso

我无法理解从try-catch语句中得到的错误消息,该语句有两个捕获

我相信一切都是正确的,但是,我得到了一个错误
异常X从未在相应的try语句体中抛出。

我相信代码是正确的,但是两个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();
    }
}

如果try块中调用的任何方法都不会抛出JSONException或ParseException,则不应捕获这些异常。这就是
异常X永远不会被抛出到相应try语句体中的意思。

它意味着您试图捕获的异常永远不会被抛出到try块中,因此将其放入catch语句->警告为错误是多余的

它只是java还是包含JSON???请添加正确的标记。看起来jsonexception或parseexception都不会在您的try块中抛出,这就是为什么ide会再次抛出它。请在收到错误消息时,不要在此处发布时编辑或修改它。您用
X
替换编译器抱怨的异常的名称。这是一个巨大的禁忌。永远不要混淆错误消息的关键部分(删除您创建的敏感文本是可以的,但仅此而已)。除了Jim Garrison发布的内容之外,您还有一个方法,
readPerson(String)
,但不包括在内。我假设这个方法抛出一个
ParseException
,但我们不能确定。此外,您的代码可能会抛出WebApplicationException,但您的方法没有指出这一点。调用
updatePerson()
方法的客户端可能会获得此异常,但无法处理它。如果使用泛型或其他方法,某个方法可能会引发未通过
throws
子句指定的异常(当将一个方法传递给另一个将执行它的方法时,有时可能需要,并且传递的方法可能会抛出一个已检查的异常,该异常应该通过另一个方法进行渗透)是否存在“nice”捕获此类异常的方法?@supercat我认为一个方法不能抛出一个未在其
throws
子句中指定的已检查异常。如果将一个方法传递给另一个将执行它的方法,则执行传递的方法必须处理传递的方法可能抛出的所有已检查异常(或在自己的
抛出
子句中声明它们)。