public:任意類可訪問private:僅本類方法可訪問,封裝核心實例域可為基本類型或對象引用(如 private String name),對象引用指向堆上對象。
| 特性 | 說明 |
|---|---|
| 同名 | 與類名相同 |
| 多構造器 | 支持重載 |
| 無返回值 | 不寫 void |
| 伴隨 new | 只能通過 new 調用,不可對現有對象再次調用 |
| 避免變量遮蔽 | 參數名前加前綴(如 aName)區分實例域 |
public void raiseSalary(double byPercent) {
double raise = this.salary * byPercent / 100; // this 代表調用對象
this.salary += raise;
}
this 只能在實例方法中使用,靜態方法無 this。
getXxx())setXxx())構造器執行結束前必須初始化,之後不可修改。適用於不可變屬性(如 name)。
static 域屬於類,全類共享一份(如 Math.PI)this,只能訪問靜態域,常用於工具方法(Math.pow())main() 為靜態方法,啟動時無對象存在Java 只有值傳遞:
public Employee(String n, double s) {
this(n, s, 0); // 調用另一構造器,必須為首行
}
public Employee(String n, double s, int id) {
this.name = n; this.salary = s; this.id = id;
}
com.company.project)保證唯一性import java.util.*; 導入包下所有類;import java.util.Date; 導入單一類public class Employee {
private static int nextId = 1;
private final String name;
private double salary;
private int id;
public Employee(String n, double s) {
name = n; salary = s; id = 0;
}
public String getName() { return name; }
public double getSalary() { return salary; }
public int getId() { return id; }
public void setId() { id = nextId++; }
public static int getNextId() { return nextId; }
public void raiseSalary(double byPercent) {
double raise = salary * byPercent / 100;
salary += raise;
}
public static void main(String[] args) {
Employee[] staff = new Employee[3];
staff[0] = new Employee("Tom", 40000);
staff[1] = new Employee("Dick", 60000);
staff[2] = new Employee("Harry", 65000);
for (Employee e : staff) {
e.setId();
System.out.printf("name=%s, id=%d, salary=%.2f%n", e.getName(), e.getId(), e.getSalary());
}
System.out.println("Next available id = " + Employee.getNextId());
}
}