奇怪的警告值 'x' 总是 'null'

Strange warning Value 'x' is always 'null'

下面的代码 returns 我出错了,它不会连接到 SQlite 数据库。

public class CardDatabase {

    private String dataBaseName;

    public CardDatabase(String dataBaseName) {
        this.dataBaseName = dataBaseName;
    }

    String databaseUrl = "jdbc:sqlite:./" + dataBaseName; // Value 'dataBaseName' is always 'null' 
    SQLiteDataSource dataSource = new SQLiteDataSource();

虽然下面的代码工作得很好。

public class CardDatabase {

    private String dataBaseName;

    public CardDatabase(String dataBaseName) {
        this.dataBaseName = dataBaseName;
    }
    
    SQLiteDataSource dataSource = new SQLiteDataSource();
    String databaseUrl = "jdbc:sqlite:./" + dataBaseName; // swaped two lines

你能帮我了解这两个代码之间的区别是什么以及为什么第一个代码无法编译吗?

String databaseUrl = "jdbc:sqlite:./" + dataBaseName; 构造函数执行之前 被初始化。

意味着它将始终使用 null,因为 dataBaseName 尚未 初始化。

但是您可以将初始化 移动到 构造函数中。最好把字段放在构造函数之前,如果你从不重新分配它们,你可以让它们final,意思是不能被覆盖:

public class CardDatabase {

    private final SQLiteDataSource dataSource = new SQLiteDataSource();
    private final String dataBaseName;
    private final String databaseUrl;

    public CardDatabase(String dataBaseName) {
        this.dataBaseName = dataBaseName;
        this.databaseUrl = "jdbc:sqlite:./" + dataBaseName;
    }
}

关于您收到的错误:可能只是因为您的 IDE 没有足够彻底地分析您的代码,它可以检查 dataBaseName 仍然是 null SQLiteDataSource dataSource = new SQLiteDataSource();