Java核心技術筆記-第4章__java

來源:互聯網
上載者:User
第4章 對象與類

1.不要編寫返回引用可變對象的訪問器方法

例如:

class Employee{    private Date hireDay;    public Date getHireDay()    {        return hireDay;    }}Employee e = ...;Date d = e.getHireDay();

此時,d就是e的hireDay,對d的更改會直接造成e的hireDay的更改。

2.如果兩個對象屬於同一個類,那麼一個對象的方法可以訪問另一個對象的私人資料。

也就是說,Employee類的方法可以訪問Employee類的任何一個對象的私人域。例如:

class Employee{    ...    public boolean equals(Employee other)    {        return name.equals(other.name);    }}

調用:if(harry.equals(boss))…
此時,不僅訪問了harry的私人域,而且訪問了boss的私人域。

3.private final Date hiredate;僅僅意味著hiredate變數中的對象 引用 在物件建構之後不能被改變。hiredate的非final資料域是可以更改的。

4.靜態方法是一種不能向對象實施操作的方法,也就不能訪問靜態域,但是可以訪問靜態域。
例如:Math.pow(x,a);
在以下3種情況可以使用靜態方法:
(1)一個方法不需要訪問對象狀態,其所需參數都是通過顯式參數提供的。
(2)一個方法只需要訪問類的靜態域。
(3)像NumberFormat類一樣,使用Factory 方法建立不同類型的對象。

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();//靜態方法NumberFormat percentFormatter = NumberFormat.getPercentInstance();//靜態方法

5.每一個類都可以有一個main方法。

這是一個對類用於單元測試的技巧。
例如,Employee類有一個main方法,Application類是一個更大的類,也有一個main方法。此時想要獨立測試Employee類,只需java Employee;而使用java Application時,只會調用Application的main方法,不會執行Employee的main方法。

6.隱式參數和顯示參數
例如,number007.raiseSalary(5);其中number007就是隱式參數,而5就是顯示參數。
this可以用來表示隱式參數。

7.方法參數。
兩種:值調用和引用調用
Java中在函數參數中採用的對象引用,屬於值調用,而不是引用調用。就是說無法讓對象參數引用一個新的對象。
總結:(1)方法的參數是一個參考型別時,對參數的資料域的更改,會直接造成真正的對象的資料域發生改變。
(2)

 public static void swap(Employee x, Employee y)   {        Employee temp = x;        x = y;        y = temp;   }

執行語句swap(employee1, employee2);
注意:此時employee1和employee2所引用的對象並沒有發生交換。

8.僅當類沒有提供任何構造器的時候,系統才會提供一個沒有參數的預設構造器。

9.在一個構造器中,可以使用this來調用另一個構造器。例如,

public Employee(double s){    this("Employee #" + nextId, s);    nextId++;}

在調用Employee(double)構造器時,同時會調用Employee(String, double)構造器。

10.初始化塊

初始化資料域三種方式:(1)在聲明中賦值 (2)在構造器中賦值 (3)使用初始化塊
像下面這樣的成為初始化塊:

class Employee{    private static int nextId;    private int id;    //初始化塊    //只要構造類的對象,初始化塊就會被執行    {        id = nextId;        nextId++;    }    //靜態初始化塊(靜態初始化塊會優先執行)    static    {        Random generator = new Random();        nextId = generator.nextInt(10000);    }    //構造器    ...}

初始化資料域順序:先執行初始化塊(先執行靜態),再調用構造器。

11.包
(1)一個類可以使用所屬包中的所有類,以及其他包中的公有類。
(2)不能匯入以java為首碼的所有包,例如import java.*;這樣是不行的。
(3)import語句不僅可以匯入包和類,還可以匯入類中的靜態域和靜態方法。例如import static java.lang.System.out;
(4)編譯命令:javac com/mycompany/PayrollApp.java
而解譯器命令: java com.mycompany.PayrollApp 使用的是.而不是/
(5)如果一個類的包名寫錯,可以正常編譯這個源檔案(如果不依賴於其他包),但是將無法執行,因為虛擬機器找不到.class類檔案。
(6)包範圍。變數標記為public的可以被任意類訪問;標記為private的只可以被定義他們的類使用;如果沒有指定,則可以被同一個包中的方法訪問。

12.Java只會對資料域進行初始化,而不會對局部資料變數進行初始化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.