東西太多,先寫在代碼裏了,以後有時間整理
public class Main
{
public static void main(String[] args)
{
Employee e1 = new Employee("lyy", 3800.0);
// 此處的e1等同於C++指針,new出來的對象返回的是一個引用
Employee e2 = e1;
// JAVA沒有默認的複製構造函數
// 因此上一行的作用是e1和e2指向同一對象
e1 = null;
// 可將對象變量設置爲null,此時若調用方法將會出錯
e1 = new Employee("qwe", 2400.0);
// 不能使用 e1.Employee("asf", 10000.0); 來構造新對象
// 構造器只能在初始化時使用,不能作爲方法調用
System.out.println(e1.getId()); // 1002
System.out.println(e2.getId()); // 1002
System.out.println(Employee.getNum()); // 2
}
}
// JAVA中方法、實例域的聲明和定義均在類中完成
// JAVA不能爲類重載運算符
class Employee
{
// 靜態域
// 只在該類第一次加載時初始化
private static int nextId = 0;
// 實例域
// 可以在實例域聲明時初始化,也可由構造器初始化,也可由初始化塊進行初始化
// 若都不進行初始化,則實例域自動初始化爲0、null或false
private String name = "";
private double salary = 0;
private final int id;
// 初始化塊,首先運行,之後纔會執行構造器
// 不是必須的
{
nextId++;
id = 1000+nextId;
}
// 構造器
// JAVA沒有列表初始化
public Employee(String aname, double asalary)
{
name = aname;
salary = asalary;
}
// 構造器和方法均可以重載,要求名字相同,參數列表不同,而與返回類型無關
// JAVA可以在構造器中調用另一個構造器(c++不行)
public Employee()
{
this("nameless", 3500.0);
}
// 域訪問器
// JAVA不提供const或者final後綴保證實例域不被更改
// 注意,不要直接返回實例域中可變對象(如類的實例)的引用
// 若該引用又使用域更改器( Setxx() ),則破壞了其封裝性
// 應使用clone方法
public String getName() { return name; }
public double getSalary() { return salary; }
public int getId() { return id; }
//這類靜態方法可以直接使用類名訪問,即Employee.getNum()
public static int getNum() { return nextId; }
public static void swap(Employee e1, Employee e2)
{
/**
* 該方法試圖交換2個引用,但是不會生效
* 因爲傳入的參數相當於是C++的指針的拷貝
* 對指針指向的區域修改是有效的
* 但是對拷貝的指針做修改並不會影響到實參
*/
Employee tmp = e1;
e1 = e2;
e2 = tmp;
// 由此可見,JAVA對對象採用的是“按值傳遞”
// 即方法無法更改基本數據類型
// 但方法可以改變對象參數的狀態,而無法使對象引用一個新對象
}
// 域更改器
// 這裏的aname和asalary稱爲顯式參數
// 而這裏的name和salary稱爲隱式參數,相等於this.name和this.salary
public void setName(String aname) { name = aname; }
public void setSalary(double asalary){ salary = asalary; }
// 自定義類中也可有一個靜態main方法,一般用於單元測試
// Eclipse測試方法,右鍵類名,運行方式-JAVA應用程序,找到該類
public static void main(String[] args)
{
Employee e1 = new Employee("skw", 4300.0);
System.out.println(e1.getId());
System.out.println(Employee.getNum());
}
}