什么是取消引用可能的空指针?

我正在为.SFTPNetBeans

我的代码的某些部分:

com.jcraft.jsch.Session sessionTarget = null;
com.jcraft.jsch.ChannelSftp channelTarget = null;
try {
       sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);
       sessionTarget.setPassword(backupPassword);
       sessionTarget.setConfig("StrictHostKeyChecking", "no");
       sessionTarget.connect();
       channelTarget = (ChannelSftp) sessionTarget.openChannel("sftp");
       channelTarget.connect();

       System.out.println("Target Channel Connected");
       } catch (JSchException e) {
            System.out.println("Error Occured ======== Connection not estabilished");
            log.error("Error Occured ======== Connection not estabilished", e);
       } finally {
            channelTarget.exit();     // Warning : dereferencing possible null pointer
            channelTarget.disconnect();  // Warning : dereferencing possible null pointer
            sessionTarget.disconnect();  // Warning : dereferencing possible null pointer
        }

我收到警告,如何解决这些警告???我可以断开和???dereferencing possible null pointerSessionChannel


答案 1

sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);在此行中,方法可以抛出一个 Exception,因此变量和将为 null,在最后的块中,您正在访问这些变量,这可能会导致 null 指针异常。getSession()sessionTargetchannelTarget

为了避免这种情况,在访问变量之前,在 finally 块中检查 null。

finally {
  if (channelTarget != null) {
       channelTarget.exit();     
       channelTarget.disconnect();  
  }
  if (sessionTarget != null ) {
       sessionTarget.disconnect();  
  }
}

答案 2

这意味着:如果你和在你最后的块中是空的怎么办?检查它们是否为 null 以避免出现警告。channelTargetsessionTarget


推荐