Java 关于try-catch语句的问题
如果我写这段代码:Java 关于try-catch语句的问题,java,try-catch,Java,Try Catch,如果我写这段代码: Document d = searcher.doc(docId); d.get("latitude") 我明白了 如果我写这个 try { Document d = searcher.doc(docId); } d.get("latitude") 我显然明白: cannot find symbol symbol : variable d 如果我写这个 Document d; try { d = searcher.doc(docId); } d.get("lat
Document d = searcher.doc(docId);
d.get("latitude")
我明白了
如果我写这个
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;
不过,在以后使用d时,您必须担心NullPointerException问题,您可以按照消息所说的做: 只需在开头用null初始化变量“d”:
Document d = null;
try {
d = searcher.doc(docId);
}
d.get("latitude");
无论如何,当心!如果发生异常,您的“d”变量将为null,您将得到一个对象引用not set exception!
包括d.get(“纬度”)在调用该行之前,请在try块中输入code>或检查null。请尝试:
Document d = null;
try {
d = searcher.doc(docId);
d.get("latitude");
}
应该是:
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只会导致一个null指针(掩盖实际原因)。d可能为null,如果catch语句本身不会抛出异常,那么我们将使用NPE来显示不正确的应用程序状态
Document d = null;
try {
d = searcher.doc(docId);
} catch (Exception e) {
//...
}
d.get("latitude");
Document d = null;
try {
d = searcher.doc(docId);
d.get("latitude");
} catch (Exception ex){
ex.getMessage();
}
Document d;
try {
d = searcher.doc(docId);
} catch (SomeException e) {
return null;
//throw new RuntimeException(e);
//d = some default value
}
d.get("latitude");