【问题标题】:Java value is always null? [duplicate]Java 值始终为空? [复制]
【发布时间】:2018-08-26 22:05:37
【问题描述】:

我在 Java 中有一个始终为 null 的值,但我不明白为什么,因为我正在使用类构造函数设置变量的值。

我有这样的代码:

Driver driverClass = new Driver("<file path redacted>");

然后是下面:

String cfgFilePath;

public Driver(String cfgFile) {
    this.cfgFilePath = cfgFile;
}

private ArrayList<String> keys = getKeys(cfgFilePath);
private String a1 = keys.get(0);
private String b1 = keys.get(1);

出于某种原因,IntelliJ IDEA 说 cfgFilePath 始终为空。我正在使用 Driver 类构造函数对其进行初始化,为什么它为空?当我运行程序时,我得到一个空指针异常。

【问题讨论】:

标签: java class oop nullpointerexception null


【解决方案1】:

keysa1b1 的初始化移动到您的构造函数中,例如:

public Driver(String cfgFile) {
    this.cfgFilePath = cfgFile;
    this.keys = getKeys(cfgFilePath);
    this.a1 = keys.get(0);
    this.b1 = keys.get(1);
}

private ArrayList<String> keys = new ArrayList<>();
private String a1;
private String b1;

【讨论】:

  • 这行得通,谢谢!但我想知道怎么做。我阅读了另一篇文章对初始化顺序的解释,但我仍然对为什么这意味着这些变量始终为空感到困惑。
  • 这些属性为空,因为您的属性keys 确实需要cfgFilePath 才能正常工作。您在构造函数中设置了cfgFilePath,但keys 属性尝试在调用构造函数之前初始化其属性,此时cfgFilePath 未设置(字符串属性为null如果未初始化,则默认为)。您有一个想要实现的预定义执行顺序 -> 1. 设置 cfgFilePath 和 2. 初始化其他属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多