天天看點

JAVA總結 之類和對象

    學而時習之,不亦說乎。學了JAVA有兩個星期了,是該把學的總結一下下了~

1.何為對象

    具體的某一個物體或者具體的某一個事物。對象具有其特征和方法

2.什麼是類

 類是一個模闆,可以通過這個類建立具體的學生對象,調用每一個對象所具有的方法(在類中已經定義),就可以改變每個對象自己的屬性的屬性。我們可以通過類,建立多個對象。

在類中定義方法,方法可以有參數,也可以無參數。當然方法可以有傳回值也可以沒有傳回值。

3.類的基本格式

  通路修飾符(private、預設的、protected、public) 

public class 類名 {

通路修飾符 資料類型 屬性名;

通路修飾符 傳回值資料類型 方法名(資料類型 參數名,...){

//方法體

}

}

4.執行個體化對象和調用方法的方式

類名 對象名 = new 類名();

對象名.方法名(參數值,...);

5.構造方法

構造方法是一種特殊的成員方法,它的特殊性反映在如下幾個方面:

a.構造方法作用:(1).構造出來一個類的執行個體 (2).對構造出來個一個類的執行個體(對象)初始化。

b.構造方法的名字必須與定義他的類名完全相同,沒有傳回類型,甚至連void也沒有。

c.構造方法的調用是在建立一個對象時使用new操作進行的。

d.類中必定有構造方法,若不寫,系統自動添加無參構造方法。接口不允許被執行個體化,是以接口中沒有構造方法。

e.不能被static、final、synchronized、abstract和native修飾。

f.構造方法在初始化對象時自動執行,一般不能顯式地直接調用.當同一個類存在多個構造方法時,java編譯系統會自動按照初始化時最後面括号的參數個數以及參數類型來自動一一對應。完成構造函數的調用。

g.構造方法分為兩種:無參構造方法 有參構造方法

構造方法可以被重載。沒有參數的構造方法稱為預設構造方法,與一般的方法一樣,構造方法可以進行任何活動,但是經常将他設計為進行各種初始化活動,比如初始化對象的屬性。

h.自定義類中,如果不寫構造方法,java系統會預設添加一個無參的構造方法。如果寫了一個有參的構造方法,可以不用寫無參構造方法。

  如果想使用無參的構造方法,就必須手動給出無參構造方法。

構造方法和普通方法的差別:

1.構造方法的是不需要定義傳回值資料類型,普通方法必須要定義傳回值資料類型。

2.構造方法的名字必須要和類名完全一緻,普通方法的名字可以任意定義(不能是關鍵字)。

3.構造方法時用來是執行個體化對象,普通方法用來表示對象的行為.

6.方法重載

方法重載是讓類以統一的方式處理不同類型資料的一種手段。Java的方法重載,就是在類中可以建立多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同個數和類型的參數來決定具體使用哪個方法

方法重載的規範:

a.方法名一定要相同。

b.方法的參數表必須不同,包括參數的類型或個數,以此區分不同的方法體。

c.如果參數個數不同,就不管它的參數類型了!

d.如果參數個數相同,那麼參數的類型或者參數的順序必須不同。

e.方法的傳回類型、修飾符可以相同,也可不同。

this關鍵字的用法

this關鍵字主要有三個應用:

 (1)this調用本類中的屬性,也就是類中的成員變量;

 (2)this調用本類中的其他方法;

 (3)this調用本類中的其他構造方法,調用時要放在構造方法的首行。

Public Class Student { 

 String name; //定義一個成員變量name

 private void SetName(String name) { //定義一個參數(局部變量)name

  this.name=name; //将局部變量的值傳遞給成員變量

 }

}

應用一:引用成員變量

 如上面這段代碼中,有一個成員變量name,同時在方法中有一個形式參數,名字也是name,然後在方法中将形式參數name的值傳遞給成員變量name,雖然我們可以看明白這個代碼的含義,但是作為Java編譯器它是怎麼判斷的呢?到底是将形式參數name的值傳遞給成員變量name,還是反過來将成員變量name的值傳遞給形式參數name呢?也就是說,兩個變量名字如果相同的話,那麼Java如何判斷使用哪個變量?此時this這個關鍵字就起到作用了。this這個關鍵字其代表的就是對象中的成員變量或者方法。也就是說,如果在某個變量前面加上一個this關鍵字,其指的就是這個對象的成員變量或者方法,而不是指成員方法的形式參數或者局部變量。為此在上面這個代碼中,this.name代表的就是對象中的成員變量,又叫做對象的屬性,而後面的name則是方法的形式參數,代碼this.name=name就是将形式參數的值傳遞給成員變量。這就是上面這個代碼的具體含義。

 一般情況下,在Java語言中引用成員變量或者成員方法都是以對象名.成員變量或者對象名.成員方法的形式。不過有些程式員即使在沒有相同變量的時候,也喜歡使用this.成員變量的形式來引用變量,這主要是從便于代碼的閱讀考慮的。一看到這個this關鍵字就知道現在引用的變量是成員變量或者成員方法,而不是局部變量。這無形中就提高了代碼的閱讀性。不過話說回來,這是this關鍵字在Java語言中的最簡單的應用。從這個應用中,我們可以看出this關鍵字其代表的就是對象的名字。

 其實如果是局部變量的話,也是相同的道理。如在上面的代碼中,name不是形式參數,而是一個局部變量。此時Java也會遇到相同的疑惑,即變量名name代表的到底是局部變量還是形式參數?name=name到底代表的是什麼含義?根據局部變量的作用域,在方法内部,如果局部變量與成員變量同名的話,那麼是以局部變量為準。可是在name=name這個指派語句中,将局部變量的值指派給自己,顯然并不是很合适。根據代碼的含義,本來的意思應該是将局部變量指派給成員變量。為了更清晰的表達這個含義,為此最好采用如下的書寫格式this.name=name。這裡的this關鍵字含義就是對象名student,為此this.name就表示student.name。

應用二:調用類的構造方法

public class Student { //定義一個類,類的名字為student。 

 public Student() { //定義一個方法,名字與類相同故為構造方法

  this(“Hello!”);

 }

 public Student(String name) { //定義一個帶形式參數的構造方法

 }

}

  this關鍵字除了可以調用成員變量之外,還可以調用構造方法。在一個Java類中,其方法可以分為成員方法和構造方法兩種。構造方法是一個與類同名的方法,在Java類中必須存在一個構造方法。如果在代碼中沒有顯示的展現構造方法的話,那麼編譯器在編譯的時候會自動添加一個沒有形式參數的構造方法。這個構造方法跟普通的成員方法還是有很多不同的地方。如構造方法一律是沒有傳回值的,而且也不用void關鍵字來說明這個構造方法沒有傳回值。而普通的方法可以有傳回值、也可以沒有傳回值,程式員可以根據自己的需要來定義。不過如果普通的方法沒有傳回值的話,那麼一定要在方法定義的時候采用void關鍵字來進行說明。其次構造方法的名字有嚴格的要求,即必須與類的名字相同。也就是說,Java編譯器發現有個方法與類的名字相同才把其當作構造方法來對待。而對于普通方法的話,則要求不能夠與類的名字相同,而且多個成員方法不能夠采用相同的名字。在一個類中可以存在多個構造方法,這些構造方法都采用相同的名字,隻是形式參數不同。Java語言就憑形式參數不同來判斷調用那個構造方法。

 在上面這段代碼中,定義了兩個構造方法,一個帶參數,另一個沒有帶參數。構造方法都不會有傳回值,不過由于構造方法的特殊性,為此不必要在構造方法定義時帶上void關鍵字來說明這個問題。在第一個沒有帶參數的構造方法中,使用了this(“Hello!”)這句代碼,這句代碼表示什麼含義呢?在構造方法中使this關鍵字表示調用類中的構造方法。如果一個類中有多個構造方法,因為其名字都相同,跟類名一緻,那麼這個this到底是調用哪個構造方法呢?其實,這跟采用其他方法引用構造方法一樣,都是通過形式參數來調用構造方法的。如上例中,this關鍵字後面加上了一個參數,那麼就表示其引用的是帶參數的構造方法。如果現在有三個構造方法,分别為不帶參數、帶一個參數、帶兩個參數。那麼Java編譯器會根據所傳遞的參數數量的不同,來判斷該調用哪個構造方法。從上面示例中可以看出,this關鍵字不僅可以用來引用成員變量,而且還可以用來引用構造方法。

 不過如果要使用這種方式來調用構造方法的話,有一個文法上的限制。一般來說,利用this關鍵字來調用構造方法,隻有在無參數構造方法中第一句使用this調用有參數的構造方法。否則的話,翻譯的時候,就會有錯誤資訊。這跟引用成員變量不同。如果引用成員變量的話,this關鍵字是沒有位置上的限制的。如果不熟悉這個限制的話,那麼還是老老實實的采用傳統的構造方法調用方式為好。雖然比較麻煩,但是至少不會出錯。

應用三:傳回對象的值

 this關鍵字除了可以引用變量或者成員方法之外,還有一個重大的作用就是傳回類的引用。如在代碼中,可以使用return this,來傳回某個類的引用。此時這個this關鍵字就代表類的名稱。如代碼在上面student類中,那麼代碼代表的含義就是return student。可見,這個this關鍵字除了可以引用變量或者成員方法之外,還可以作為類的傳回值,這才是this關鍵字最引人注意的地方。

O(∩_∩)O~~好了 暫且這麼多,以後如果學的多來再來改吧~