iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
自我挑戰組

Java 程式設計與實作:30 天打造個人記帳系統系列 第 11 篇

Class 與 Object:建立真正的消費紀錄

  • 分享至 

  • xImage
  •  

昨天學習了 Method,把不同功能分開,讓程式碼變得比較整齊。

今天要開始進入 Java 很重要的一個觀念:物件導向程式設計(Object-Oriented Programming,OOP)。

第一步就是認識 Class(類別)與 Object(物件)。

為什麼需要 Class?

目前我們保存消費資料的方式是:

ArrayList items = new ArrayList<>();
ArrayList amounts = new ArrayList<>();

例如:

items.add("早餐");
amounts.add(60);

這代表「早餐」和「60 元」其實被分開放在兩個不同的 ArrayList 裡。

如果之後還要增加:

消費分類
消費日期
付款方式

可能就會變成:

ArrayList items;
ArrayList amounts;
ArrayList categories;
ArrayList dates;

資料越來越多,就會比較難管理。

所以今天想把「一筆消費」直接整理成一個完整的物件。

什麼是 Class?

我目前的理解是,可以先把 Class 想成一張「設計圖」。

例如一筆消費紀錄需要:

消費項目
消費金額

就可以建立一個 Expense 類別:

class Expense {
String item;
int amount;
}

這代表每一個 Expense 都可以擁有自己的:

item
amount

例如:

早餐 → 60 元
午餐 → 120 元
捷運 → 30 元

都可以分別變成不同的 Expense 物件。

什麼是 Object?

Class 是設計圖,而根據 Class 建立出來的實際資料就是 Object(物件)。

例如:

Expense expense = new Expense();

這行程式建立了一個 Expense 物件。

接著可以放入資料:

expense.item = "早餐";
expense.amount = 60;

完整範例:

class Expense {
String item;
int amount;
}
public class Main {
public static void main(String[] args) {
Expense expense = new Expense();
expense.item = "早餐";
expense.amount = 60;
System.out.println("消費項目:" + expense.item);
System.out.println("消費金額:" + expense.amount + " 元");
}
}

執行結果:

消費項目:早餐
消費金額:60 元

這樣「早餐」和「60」就不再是兩個分開的資料,而是屬於同一個 Expense 物件。

建立多個 Object

既然 Class 是設計圖,就可以使用同一個 Class 建立很多物件。

例如:

Expense expense1 = new Expense();
expense1.item = "早餐";
expense1.amount = 60;
Expense expense2 = new Expense();
expense2.item = "捷運";
expense2.amount = 30;
Expense expense3 = new Expense();
expense3.item = "午餐";
expense3.amount = 120;

這三個都是 Expense 類別建立出來的物件,但是每個物件保存的資料都不一樣。

可以想成:

Expense
│
├── expense1 → 早餐、60 元
├── expense2 → 捷運、30 元
└── expense3 → 午餐、120 元

這樣開始比較有「一筆消費紀錄」的感覺。

今天的小實作:把 Expense 放進 ArrayList

前幾天我們學過 ArrayList。

今天可以把 Expense 和 ArrayList 結合起來:

ArrayList expenses = new ArrayList<>();

以前是:

ArrayList items = new ArrayList<>();
ArrayList amounts = new ArrayList<>();

現在只需要一個:

ArrayList expenses = new ArrayList<>();

就可以保存很多個 Expense 物件。

完整程式

今天先把記帳系統修改成下面這樣:

import java.util.Scanner;
import java.util.ArrayList;
class Expense {
String item;
int amount;
}
public class Main {
static Scanner scanner = new Scanner(System.in);
static ArrayList expenses = new ArrayList<>();
public static void main(String[] args) {
boolean running = true;
while (running) {
showMenu();
System.out.print("請選擇功能:");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
addExpense();
break;
case 2:
showExpenses();
break;
case 3:
running = false;
System.out.println("已離開個人記帳系統!");
break;
default:
System.out.println("輸入錯誤,請重新選擇!");
}
}
scanner.close();
}
public static void showMenu() {
System.out.println();
System.out.println("===== 個人記帳系統 =====");
System.out.println("1. 新增消費");
System.out.println("2. 查看紀錄");
System.out.println("3. 離開");
}
public static void addExpense() {
Expense expense = new Expense();
System.out.print("請輸入消費項目:");
expense.item = scanner.nextLine();
System.out.print("請輸入消費金額:");
expense.amount = scanner.nextInt();
scanner.nextLine();
expenses.add(expense);
System.out.println("記帳成功!");
}
public static void showExpenses() {
System.out.println();
System.out.println("===== 消費紀錄 =====");
if (expenses.size() == 0) {
System.out.println("目前沒有消費紀錄。");
} else {
for (int i = 0; i < expenses.size(); i++) {
Expense expense = expenses.get(i);
System.out.println(
(i + 1) + ". "
+ expense.item + ":"
+ expense.amount + " 元"
);
}
}
}
}

實際執行看看

先新增:

===== 個人記帳系統 =====

  1. 新增消費
  2. 查看紀錄
  3. 離開
    請選擇功能:1
    請輸入消費項目:早餐
    請輸入消費金額:60
    記帳成功!

再新增:

請輸入消費項目:捷運
請輸入消費金額:30
記帳成功!

選擇查看紀錄:

===== 消費紀錄 =====

  1. 早餐:60 元
  2. 捷運:30 元

使用者看到的結果跟之前差不多,但是程式內部保存資料的方法已經不一樣了。

以前:

items.add(item);
amounts.add(amount);

現在變成:

Expense expense = new Expense();
expense.item = "早餐";
expense.amount = 60;
expenses.add(expense);

這代表「早餐+60 元」現在是一個完整的 Expense 物件。

Class 和 Object 我怎麼記?

今天一開始我覺得 Class 和 Object 有點抽象,所以我用比較簡單的方式記:

Class = 設計圖

class Expense {
String item;
int amount;
}

它規定一筆消費應該有哪些資料。

Object = 根據設計圖建立出來的實際東西

Expense expense = new Expense();

再給它真正的資料:

expense.item = "早餐";
expense.amount = 60;

所以可以簡單理解成:

Expense Class
↓
建立 Object
↓
早餐 + 60 元

Day 11 學習心得
今天開始接觸 Java 很重要的物件導向概念,學習了 Class 和 Object。
一開始覺得這兩個名詞有點抽象,不過把它套用到記帳系統之後,就比較容易理解。Class 就像一張設計圖,而 Object 則是根據設計圖建立出來的實際資料。
以前消費項目和金額需要分開保存,現在可以把它們放進同一個 Expense 物件裡。雖然今天程式執行出來的畫面沒有太大的變化,但是資料的整理方式變得比較完整,也為之後加入更多消費資訊做準備。


上一篇
Method 方法:把記帳系統的功能整理乾淨
下一篇
Constructor 建構子:建立物件時直接加入消費資料
系列文
Java 程式設計與實作:30 天打造個人記帳系統 共 23 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言