[英]Question about try catch statement
如果我写这段代码:
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扩展到所有文档,我该如何解决此问题?
谢谢
Document d = null;
而不只是
Document d;
尽管那样的话,当您使用d时,稍后您将不得不担心NullPointerException的问题。
尝试:
Document d = null;
try {
d = searcher.doc(docId);
d.get("latitude");
}
您按照消息中的说明进行操作:只需在开头用null初始化变量“ d”:
Document d = null;
try {
d = searcher.doc(docId);
}
d.get("latitude");
无论如何,当心! 如果发生异常,则您的“ d”变量将为null,并且您将获得未设置异常的对象引用! 要么包含d.get("latitude");
在try块中,或在调用该行之前检查是否为null。
您应该初始化变量并捕获异常(可以根据需要更改异常名称并获取消息级别)。
Document d = null;
try {
d = searcher.doc(docId);
d.get("latitude");
} catch (Exception ex){
ex.getMessage();
}
应该:
Document d = null;
try {
d = searcher.doc(docId);
} catch (Exception e) {
//...
}
d.get("latitude");
您可以将其初始化为null,但我认为不应该这样做。
如果该方法引发异常,则d == null,因此您需要使用if (d != null)
处理该情况,或者仅在try块内使用作用域d。
我愿意去做。
如果您的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时,才会在您的异常确实发生时遮盖指针(使实际原因难以理解)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.