获取 "Variable might not initialized error"
Getting "Variable might not initialized error"
我正在为 Sqlite 数据库创建函数并收到“变量可能未初始化”错误。我正在尝试将 sqlite 数据存储在字符串数组中。
public String[] gettitle()
{
String title[];
String s = "select Title from User_DB;";
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(s,null);
int a = 0;
while(cursor.moveToNext())
{
title[a] = cursor.getString(0);
a++;
}
return title;
}
它说 title[] 没有初始化,但我不明白为什么。我明明初始化了
您声明title
。允许的 C 语言风格是 String title[]
。在 java 中,将类型表达式放在一起:String[] title;
String[] title;
这个变量未初始化,为一个数组object预留了一个内存槽,但是内存没有被填满,初始化;它包含垃圾。在第一次使用 title
时,编译器会发出错误。
相反class字段默认自动初始化:这里null
,但对于其他类型0
,false
、0.0
等等。
初始化变量:给它一个初始值。
对于数组,这意味着设置一个数组object。数组是固定长度的,不能增长,因此:
String[] title;
title = new String[10];
或更短:
String[] title = new String[10];
与字段一样,数组元素也使用默认值初始化,null
。
请注意您已初始化 a
:int a = 0;
。
现在可以通过变量使用数组object:
title[a] = cursor.getString(0);
这是编译器看到仍然没有值的变量的用法的地方。
所以代码变成:
public String[] loadTitles() {
String[] titles = new String[100];
String sql = "select Title from User_DB";
SQLiteDatabase db = getReadableDatabase();
int a = 0;
try (Cursor cursor = db.rawQuery(sql, null)) {
while (a < titles.length && cursor.moveToNext()) {
titles[a] = cursor.getString(0);
a++;
}
} // Calls cursor.close();
return Arrays.copyOf(titles, a);
}
Array.copyOf(array, newLength)
复制原始数组,新长度为阅读标题数。
我添加了(奇怪的)try-with-resources 语法,确保 cursor
关闭,即使在异常或内部发生 return 时也是如此街区。
我正在为 Sqlite 数据库创建函数并收到“变量可能未初始化”错误。我正在尝试将 sqlite 数据存储在字符串数组中。
public String[] gettitle()
{
String title[];
String s = "select Title from User_DB;";
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(s,null);
int a = 0;
while(cursor.moveToNext())
{
title[a] = cursor.getString(0);
a++;
}
return title;
}
它说 title[] 没有初始化,但我不明白为什么。我明明初始化了
您声明
title
。允许的 C 语言风格是String title[]
。在 java 中,将类型表达式放在一起:String[] title;
String[] title;
这个变量未初始化,为一个数组object预留了一个内存槽,但是内存没有被填满,初始化;它包含垃圾。在第一次使用
title
时,编译器会发出错误。相反class字段默认自动初始化:这里
null
,但对于其他类型0
,false
、0.0
等等。初始化变量:给它一个初始值。
对于数组,这意味着设置一个数组object。数组是固定长度的,不能增长,因此:
String[] title; title = new String[10];
或更短:
String[] title = new String[10];
与字段一样,数组元素也使用默认值初始化,
null
。请注意您已初始化
a
:int a = 0;
。现在可以通过变量使用数组object:
title[a] = cursor.getString(0);
这是编译器看到仍然没有值的变量的用法的地方。
所以代码变成:
public String[] loadTitles() {
String[] titles = new String[100];
String sql = "select Title from User_DB";
SQLiteDatabase db = getReadableDatabase();
int a = 0;
try (Cursor cursor = db.rawQuery(sql, null)) {
while (a < titles.length && cursor.moveToNext()) {
titles[a] = cursor.getString(0);
a++;
}
} // Calls cursor.close();
return Arrays.copyOf(titles, a);
}
Array.copyOf(array, newLength)
复制原始数组,新长度为阅读标题数。
我添加了(奇怪的)try-with-resources 语法,确保 cursor
关闭,即使在异常或内部发生 return 时也是如此街区。