天天看點

初學Java知識點  Java中關于構造方法:方法的重載:一個類的加載過程:關于this:繼承抽象類、抽象方法接口

  Java中關于構造方法:

1.構造方法的方法名稱必須與類名稱相同

2.構造方法必須是public修飾(以後Java進階程式設計中會出現private修飾的構造方法)

3.構造方法定義時不能存在傳回值類型的說明

4.構造方法是在new的時候被調用的,也僅僅在new的時候調用

        構造方法除了在new的時候調用,且是被JVM自動調用之外,在任何情況下都不能把構造方法當成普通方法加以調用

5.構造方法的調用是為了實作對類中成員的初始化(賦初值)。

6.若在類中無構造方法,Java會自動産生一個無參的構造方法。

方法的重載:

Java允許定義同名的方法,且滿足如下要求:

1.方法名稱完全相同

2.方法的參數不同(個數不同或者類型不同)

3.同名方法,若參數個數和類型相同,僅僅是傳回值類型不同 ,這不能稱為“方法的重載”。

一個類的加載過程:

初學Java知識點  Java中關于構造方法:方法的重載:一個類的加載過程:關于this:繼承抽象類、抽象方法接口

當出現AboutThis即類名稱時,所有方法和靜态成員将調入記憶體形成一個空間;每次進行new時隻對非靜态成員申請空間,兩次申請即為兩個不同的空間。

關于this:

初學Java知識點  Java中關于構造方法:方法的重載:一個類的加載過程:關于this:繼承抽象類、抽象方法接口

1、this的出現,是為了解決形參(局部變量)名稱與類成員名稱的沖突問題的;(避免二義性)

2、在聲明類時,this是一個“待定系數”,即,其在聲明時,值是不确定的;

3、在引用語句中,this被“.”運算符左側的對象名稱所替代(對象名稱實質上是指向本執行個體的指針);

4、this()使用方法解釋:()是函數(方法)的辨別,或者說,”使用者辨別符(…)”是對相關方法的調用;this()是對構造方法的調用;this(…)所調用的是參數比對的相關構造方法(被重載的構造方法);若構造方法中出現this(…),則,該語句必須是這個構造方法中的第一條有效語句。(自然而然的說,this()隻能出現在構造方法中。)

關于final:

final是“最終”的意思。可以修飾class、修飾方法、修飾成員……

final的本質含義是:隻讀;

final的特點:

1)若定義一個static修飾的final類型的空間(隻讀空間),則,該空間(變量)必須賦初值;

2)若定義一個沒有static修飾的final類型空間(隻讀空間),且不賦初值,則,Java要求在構造方法中必須實作對該空間的指派。

關于static:

1)由于方法的本質是代碼段,作業系統禁止更改代碼段,是以,同一個類的不同執行個體,共用一份代碼段;

2)同一個類的不同執行個體的各自非靜态成員應該互相獨立,不互相幹擾,是以,非靜态資料成員應該每一份執行個體,單獨申請各自空間。

在類名稱第一次出現時,該類中,除了非靜态成員外,其它所有的靜态成員、靜态方法和非靜态方法都已經調入記憶體(在代碼段和資料段中);非靜态成員隻有在new的時候,再在系統堆中申請空間。

而有static修飾的成員(和方法),是所有該類的執行個體都隻申請單獨一份該成員的空間;即,所有該類的執行個體都共同享有static修飾的資料成員!也就是說,更改一個執行個體的static成員,就等于更改了所有執行個體的這個成員的值!因為其實這個成員隻有一份!大家共享!

帶有static修飾的成員(方法)是在該類第一次在代碼中出現的時候申請其空間的!

比如:

Point p1;

上述代碼并沒有對Point類進行執行個體化,但是,其所有的static資料成員和方法成員都已經“加載”了!并且,以後這些成員和方法不再另外申請空間!

如果一個方法是static類型的,則,該方法無需執行個體化就可以被調用;而在這時是不存在非靜态成員的,是以,如果方法中存在對非靜态成員的引用,這是錯誤的!

結論:靜态方法不能引用任何非靜态構件(包括成員、方法、類)

局部變量(包括形參變量)在堆棧中申請空間;非靜态成員隻能在new之後在系統堆中申請空間

靜态方非靜态方法在代碼段中,靜态成員在資料段中。

非靜态方法隻能通過對象.方法名稱調用;而靜态方法一般通過類名稱

繼承

對于繼承,首先限制繼承的範圍(權利):public、protected、private

public可以任意繼承、引用;

protected可以被繼承;隻能在同一個包内被引用;

private既不能被繼承,也不能在“定義private成員(方法)的類”的{}之外被引用。

子類(派生類)能夠繼承基類(父類、超類)的所有非private的成員和方法。

注意:不能多重繼承

final與繼承的關系

在類中,若成員被修飾為final,則,該成員被稱為“常量變量”,或說:隻讀變量(隻讀空間)。

若在類的定義中出現final修飾,則,意味着該類不能作為基類産生派生類,即,不可繼承。

若在方法的定義中出現final修飾,則,意味着該方法不能被派生類所覆寫!

關于finalize()方法:

Java的對象必須先new,即申請空間,但是,不需要像C那樣顯式的通過free()函數回收所配置設定的空間,因為,Java存在“垃圾回收機制,即,gc”。但是,在相關對象空間回收前,Java會自動執行finalize()方法。預設情況下,finalize()方法不執行任何操作。如果覆寫這個方法,那麼,就會在對象被回收前執行相關代碼(通常用于回收非記憶體資源,如網絡資源、檔案資源等)。

在有繼承關系的類中,葉子類(就是最底層的子類)對象在回收前,會按照先執行本類finalize()方法,再執行父類finalize()方法,再執行祖先類finalize()方法,……,如是,直到執行完Object這個最祖先類的finalize()方法。

可見,finalize()方法的執行順序與構造方法的執行順序,正好相反!

抽象類、抽象方法

隻聲明而未定義的方法,需要跟上abstrac修飾,形成“抽象方法”,抽象方法是不能被調用的;

包含着至少一個抽象方法的類,是不完整的類,稱為“抽象類”,抽象類不能直接執行個體化。

抽象類可以作為基類派生其他類;抽象類的派生類若覆寫其所有的抽象方法,則派生類是普通類,否則依然是抽象類。

抽象類執行個體化方法:

1.以抽象類為基類派生出普通類,即在派生類中實作其所有抽象方法,再以普通類為類型執行個體化對象;

2.在用抽象類執行個體化對象的過程中直接實作其所有的抽象方法。

接口

關鍵字:interface

接口的成員擁有聯合屬性聲明:public static final

接口的方法擁有聯合屬性聲明:public abstract

是以接口不能直接執行個體化。

對于接口的應用有兩種方式:

第一種接口的實作(implements):

通過類“實作”接口,即使用implements關鍵字實作

第二種接口的實作:

在對接口進行對象的執行個體化的同時實作其未實作的抽象方法(這會産生匿名内部類)

注意:實作了接口的類的對象一定是這個接口的執行個體;類可以實作多個接口;接口内不能有構造方法;