我正在為 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;
}
它說標題 [] 未初始化,但我不明白為什么。我清楚地初始化了它。
uj5u.com熱心網友回復:
你宣告
title. 允許的 C 語言風格是String title[]. 在 java 中,將型別運算式保持在一起:String[] title;String[] title;這個變數是未初始化的,為陣列物件預留一個記憶體槽,但是記憶體沒有填滿,初始化;它包含垃圾。在第一次使用
title編譯器時會出現錯誤。相比之下,類欄位默認自動初始化:here
null,但對于其他型別0,false等等0.0。初始化變數:給它一個初始值。
對于陣列,這意味著設定一個陣列物件。陣列是固定長度的,不能增長,因此:
String[] title; title = new String[10];或更短:
String[] title = new String[10];像欄位一樣,陣列元素也使用默認值初始化,
null.請注意您已初始化
a:int a = 0;。現在您可以通過變數使用陣列物件:
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關閉,即使在塊內發生例外或回傳時也是如此。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446895.html
