Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于try-catch语句的问题_Java_Try Catch - Fatal编程技术网

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(“纬度”)或检查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");