关于try catch语句的问题

时间:2011-03-29 21:52:26

标签: java try-catch

如果我写这段代码:

Document d = searcher.doc(docId);
d.get("latitude")

我得到了

unreported exception ... must be caught or declared to be thrown

如果我写这个,

try {
    Document d = searcher.doc(docId);
}
d.get("latitude")

我显然得到了:

cannot find symbol
symbol  : variable d

如果我写这个

Document d;
try {
d = searcher.doc(docId);
}
d.get("latitude");

我明白了:

variable d might not have been initialized

由于我不想将try / catch扩展到所有文档,我该如何解决这个问题?

感谢

7 个答案:

答案 0 :(得分:4)

Document d = null;

而不仅仅是

Document d;

尽管如此,当你使用d

时,你不得不担心NullPointerException

答案 1 :(得分:3)

尝试:

Document d = null;
try {
   d = searcher.doc(docId);
   d.get("latitude");
}

答案 2 :(得分:2)

你做的是消息所说的: 只需在开头使用null初始化变量“d”:

Document d = null;
try {
  d = searcher.doc(docId);
}
d.get("latitude"); 

无论如何,要小心!如果发生异常,您的“d”变量将为null,您将获得一个未设置异常的对象引用! 在try块中包含d.get("latitude");或在调用该行之前检查null。

答案 3 :(得分:1)

您应该初始化变量并捕获异常(您可以根据需要更改异常名称并获取消息级别)。

Document d = null;
try {
   d = searcher.doc(docId);
   d.get("latitude");
} catch (Exception ex){
   ex.getMessage();
}

答案 4 :(得分:0)

应该是:

Document d = null;
try {
    d = searcher.doc(docId);
} catch (Exception e) {
    //...
}
d.get("latitude");

答案 5 :(得分:0)

你可以把它初始化为null,但在我看来你不应该这样做。

如果方法抛出异常,则d == null,因此您需要使用if (d != null)来处理该情况,或者只需要在try块内处理范围d。

我会做后者。

答案 6 :(得分:0)

如果catch导致方法的其余部分跳过(通过return或throw语句),或者如果在catch中初始化d,则不应该出现此错误。

Document d;
try {
    d = searcher.doc(docId);
} catch (SomeException e) {
    return null;
    //throw new RuntimeException(e);
    //d = some default value
}
d.get("latitude");

刚刚初始化d = null只会在异常发生时导致空指针(模糊实际原因)。

相关问题