public class Book {
// 成員變數 (屬性) - 建議 private + getter/setter
private String name;
private String price;
// 無參構造器
public Book() {}
// 有參構造器
public Book(String name, String price) {
this.name = name;
this.price = price;
}
// getter/setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getPrice() { return price; }
public void setPrice(String price) { this.price = price; }
}
| private | default | protected | public | |
|---|---|---|---|---|
| 本類 | ✓ | ✓ | ✓ | ✓ |
| 同包 | ✗ | ✓ | ✓ | ✓ |
| 子類(異包) | ✗ | ✗ | ✓ | ✓ |
| 其他包 | ✗ | ✗ | ✗ | ✓ |
ClassName.field 存取ClassName.method() 呼叫、不可用 this、不可直接呼叫非靜態成員static final、命名慣例 MAX_SIZE、編譯期常量折疊static { ... }、類載入時執行一次、初始化靜態資源NumberFormat percent = NumberFormat.getPercentInstance(); // 20%
NumberFormat currency = NumberFormat.getCurrencyInstance(); // ¥0.20
double d = 0.2;
System.out.println(percent.format(d));
System.out.println(currency.format(d));
NumberFormat 靜態工廠方法根據需求返回不同格式化器實例,隱藏具體實現類。
| 參數類型 | 傳遞內容 | 能否修改原值 | 範例 |
|---|---|---|---|
| 基本型別 | 值的副本 | 否 | change(int x) 修改 x 不影響實參 |
| 引用型別 | 引用的副本 (指向同一物件) | 可修改物件狀態 不可重新指向新物件 | obj.setName() 生效obj = new Obj() 不生效 |
public static void main(String[] args) {
// 1. 基本型別
int i = 2; changeValue(i); System.out.println(i); // 2
// 2. 引用型別 - 修改狀態
Book b = new Book(); b.setName("Hello");
changeBookName(b); // 內部 b.setName("Hello,World")
System.out.println(b.getName()); // Hello,World
// 3. 引用型別 - 嘗試交換引用
Book b1 = new Book("hello","11");
Book b2 = new Book("world","22");
switchBook(b1, b2); // 內部交換區域引用
System.out.println(b1.getName()); // hello (未變)
System.out.println(b2.getName()); // world (未變)
}
private 隱藏數據、public 方法暴露行為、this 區分同名變數extends、super 調用父類、@Override 覆寫、單繼承/多重繼承