首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java ArrayList 靜態數據初始化與 Main 方法輸出實戰

     編輯:程式設計綜合問答

問題背景

類 `BookData` 包含靜態 `ArrayList` 字段 `book`、`customer`,及靜態方法 `bkdata()` 初始化數據。需求:在 `main` 方法中調用 `bkdata()` 並輸出書本信息。

原始代碼結構

public class BookData {
    private static ArrayList book = new ArrayList();
    private static ArrayList customer = new ArrayList();

    public static void bkdata() {
        BookDaoImp bookDaoImp = new BookDaoImp();
        bookDaoImp.create("計算機類", 300);
        // ... 更多創建
        // 缺少:將創建的對象加入 book 列表
        // 缺少:輸出邏輯
    }
    // getter/setter 省略
}

核心問題:創建對象未加入集合、無輸出邏輯

  • `bookDaoImp.create(...)` 內部可能只是設置字段,**未將對象添加到 `BookData.book` 列表**。
  • `bkdata()` 方法未遍歷列表輸出。

修正完整代碼示例

import java.util.ArrayList;
import java.util.List;

public class BookData {
    private static List bookList = new ArrayList<>();
    private static List customerList = new ArrayList<>();

    public static void bkdata() {
        // 創建書籍種類並加入列表
        BookDaoImp b1 = new BookDaoImp(); b1.create("計算機類", 300); bookList.add(b1);
        BookDaoImp b2 = new BookDaoImp(); b2.create("文史類", 300); bookList.add(b2);
        BookDaoImp b3 = new BookDaoImp(); b3.create("小說類", 300); bookList.add(b3);

        // 創建會員信息並加入列表
        CustomerDaoImp c1 = new CustomerDaoImp(); c1.create("張三", "vip會員"); customerList.add(c1);
        CustomerDaoImp c2 = new CustomerDaoImp(); c2.create("李四", "會員"); customerList.add(c2);
        CustomerDaoImp c3 = new CustomerDaoImp(); c3.create("王五", "普通"); customerList.add(c3);

        // 輸出書籍信息
        System.out.println("=== 書籍目錄 ===");
        for (BookDaoImp bk : bookList) {
            System.out.println("名稱: " + bk.getName() + ", 庫存: " + bk.getTotal());
        }

        // 輸出會員信息
        System.out.println("\n=== 會員列表 ===");
        for (CustomerDaoImp c : customerList) {
            System.out.println("姓名: " + c.getName() + ", 類型: " + c.getType());
        }
    }

    public static void main(String[] args) {
        bkdata();
    }
}

// 簡化的 DAO 實現類
class BookDaoImp {
    private String name;
    private int total;
    public void create(String name, int total) { this.name = name; this.total = total; }
    public String getName() { return name; }
    public int getTotal() { return total; }
}

class CustomerDaoImp {
    private String name;
    private String type;
    public void create(String name, String type) { this.name = name; this.type = type; }
    public String getName() { return name; }
    public String getType() { return type; }
}

關鍵修正點

  1. **泛型化集合**:`List` 替代原始 `ArrayList`,類型安全。
  2. **創建即入列**:`new BookDaoImp()` → `create()` → `bookList.add()`,不可缺少 `add` 步驟。
  3. **封裝輸出邏輯**:在 `bkdata()` 內或單獨方法中遍歷輸出,保持 `main` 簡潔。
  4. **靜態上下文**:`main` 為靜態,只能直接調用靜態方法/訪問靜態字段,設計符合要求。

進階建議

  • **分離關注點**:`BookData` 僅作為數據容器,初始化邏輯移至 `DataInitializer` 或 `main` 中,符合單一職責原則。
  • **使用構造器/工廠**:`BookDaoImp` 的 `create` 方法異常,建議改為構造器 `new BookDaoImp("計算機類", 300)` 或靜態工廠 `BookDaoImp.of(...)`。
  • **持久化擴展**:若需保存至文件/數據庫,引入 `Repository` 接口,實現 `saveAll(List)`。

最佳回答提供了完整可運行的修正代碼,補全了缺失的 `add` 操作、輸出循環、DAO 類定義與 `main` 入口,直接解決了「如何在 main 裡輸出 bkdata」的問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved