此问题已在此处找到答案:
在java中运行构造函数代码之前是否初始化字段((五个答案)
java值总是空的[(1份答覆)
四天前关门。
下面的代码返回一个错误,它无法连接到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
你能帮我了解这两个代码之间的区别吗?为什么第一个代码不能编译?
1条答案
按热度按时间vpfxa7rd1#
String databaseUrl = "jdbc:sqlite:./" + dataBaseName;
在执行构造函数之前初始化。意味着它将始终使用
null
因为dataBaseName
尚未初始化。但是您可以将初始化移到构造函数中。最好将字段放在构造函数之前,如果您从未重新分配它们,则可以将其设置为
final
,表示无法覆盖:关于您收到的错误:可能只是您的ide没有充分地分析您的代码,它可以检查这一点
dataBaseName
还是null
排队后SQLiteDataSource dataSource = new SQLiteDataSource();