方法
5要素:修飾詞、返回值型別、方法名、引數列表、方法體。
例如:public static void main(string args)
其中,public static
是修飾詞;
void
是返回值型別,
main
是方法名;
string args是引數型別和引數;被大括號包裹的是方法體。
注意事項:
(1)方法的引數可有可無,但有引數時更靈活
(2)當方法不需要返回結果時,返回值型別用void
。(3)當方法需要返回值型別時,設定返回值型別,返回值型別可以是基本型別也可以是引用型別,通過return
返回結果,返回的結果必須與返回值型別匹配。無論
return
有無返回結果,使用了
return
都將結束方法體。
構造方法:常常用於給成員變數(非靜態變數)初始化,初始化的是類的例項。
注意事項:
(1)方法名必須和類名相同,無返回值型別(
也不用void)
(2)不能被static
、final
、synchornized
、abstract
、native
修飾(3)在建立物件的同時被自動呼叫
(4)若自己未寫構造方法,則編譯器會預設給出乙個無方法體的無參構造方法。
(5)若自己寫了構造方法,則編譯器不會給出缺省的無參構造,只能使用我們自己定義的構造方法。
靜態方法:被static
修飾的方法。
注意事項:
(1)這類方法沒有隱式的this
和super
,不能使用這兩關鍵字
(2)只能訪問靜態的變數和方法(用類名直接訪問 ),不能直接訪問例項變數和例項方法,若需訪問可用間接用例項物件訪問。
(3)不能和abstract
連用,靜態方法必須要實現。
(4)位於記憶體中的方法區。
(5)構造方法可以有多個過載,但不能被重寫。
非靜態方法:未被static
修飾的方法。
和靜態方法的區別:
(1)這類方法有隱式的this
和super
,可以使用
this
訪問當前物件,用
super
訪問父類物件。
(2)可以直接訪問靜態的變數和方法, 也可以訪問非靜態的變數和方法。
靜態**塊:static{ **塊 },用於對類的靜態變數賦值,初始化類。
注意事項:
(1)靜態**塊是屬於類的**塊,主要用於對類的靜態變數初始化。
(2)位於方法區中,在類載入期間執行,且只執行一次。
(3)類中不同的靜態**塊會根據它們在類中出現的順序被依次執行。
(4)靜態**塊通常用於軟體載入靜態資源。
抽象方法:被abstract
修飾的方法。用於描述系統具有什麼功能,而不提供具體的實現。
注意事項:
(1)抽象方法是乙個不完整的方法,沒有方法體,也沒有{},以分號結尾。
格式為:訪問修飾詞 abstract
返回值型別 方法名(引數列表);
eg:public abstract int getnumber
(int a
);(2)抽象方法必須被子類實現,所以不能用private
修飾。(3)抽象方法必須包含在抽象類中。
抽象類:被abstract
修飾的類
注意事項:
(1)抽象類不能被例項化。
(2)抽象類不能被private
、final
、static
修飾(3)如果乙個類繼承了抽象類,那麼子類必須重寫其繼承的抽象方法。(不一定必須實現,仍可重新為抽象方法)
(4)乙個抽象類可能不包含抽象方法,但包含抽象方法的類必定是抽象類
抽象類的意義:
(1)封裝子類中的重複內容(成員變數和方法)
(2)為子類提供乙個公共的型別
(3)定義有抽象方法,可以讓子類重寫該方法實現不同的功能
介面(interfence):一種標準或規範,是一種特殊的抽象類。
注意事項:
(1)在介面中只包含抽象方法和常量。常量的(public static final
)可以省略。
(2)介面的實現是使用implements
關鍵字。
(3)乙個類實現某個介面後必須要實現該介面中的所有方法,且重寫方法時,方法的修飾詞應為public
。(4)乙個介面可以繼承另乙個介面,乙個類可以實現多個介面,中間用逗號分隔。
(5)當乙個類既有繼承,又有介面,那麼先繼承再實現介面
方法的過載和重寫
方法的過載(overload
):在同乙個類中,方法名相同,引數列表不相同的方法就是方法的過載。無論返回值型別和訪問修飾詞如何,只要符合上述條件就是方法的過載。在編譯期繫結,看型別。可以被多次過載。
方法的重寫(override
):在父子類中,滿足「兩同兩小一大」條件要求的方法才算方法的重寫。只能重寫一次。條件如下:
兩同:方法名和引數列表相同
兩小:子類的返回值型別小於等於父類;子類丟擲的異常小於等於父類。
一大:子類的訪問許可權大於或等於父類。
變數:分為靜態變數和例項變數
在類中變數分為成員變數和區域性變數,成員變數又分為例項成員變數和靜態成員變數。
成員變數:定義在類中,由系統設定預設值,可以不顯式化初始化。成員變數儲存在堆中,生命週期為:例項化物件時出生,物件被**時死亡。
區域性變數:定義在方法中,不能被顯式的訪問修飾詞(public
,private
,protected
)和static
修飾,不能通過類名或引用名訪問,沒有預設值,使用前必須自行設定初始化。區域性變數儲存在棧中。生命週期為:方法呼叫時出生,方法結束時從棧中清除。
靜態變數:被static
修飾的變數,儲存在方法區中,在記憶體中只有乙份,被所有例項共享,屬於類。可以直接通過類名訪問。生命週期取決於類的生命週期。
例項變數:未被static
修飾,沒建立乙個例項,都會為例項變數分配一次記憶體,儲存於堆中,屬於物件,乙個物件乙份例項變數。生命週期取決於生命週期。
記憶體分配:堆、棧、方法區
堆:儲存new
出來的物件例項(包括成員變數)
棧:儲存區域性變數,引用。呼叫方法時,棧中分配該方法的棧幀,棧幀中包括引數和區域性變數。當方法執行結束時,棧幀被清除,區域性變數失效。
方法區:儲存類的資訊(.class
及方法)和靜態變數,方法只有乙份,通過
this
區分物件。
package com.blogs.yuan;
public class a
/*** 過載構造方法
* @param a
*/public a(int a)
/*** 靜態**塊,用於載入靜態資源,初始化類
*/static
/*** 靜態方法,測試靜態方法的使用
*/public static void teststatic()
public void testnotstatic()
//public abstract int getnumber(int a); //若存在抽象方法,那麼類必須是抽象類,不能被例項化。
public static void main(string args)
}class b extends a
//重寫父類方法,並覆蓋它
public void testnotstatic()
}
類和動態記憶體分配
part 1 靜態類成員特點 無論建立了多少物件,程式都只建立乙個靜態類變數副本。也就是說,類的所有物件共享乙個靜態成員。靜態資料成員在類宣告中宣告,在包含類方法的檔案中初始化。初始化時使用作用域運算子來指出靜態成員所屬的類。但如果靜態成員是const整數型別或列舉型,則可以在類宣告中初始化。par...
類和動態記憶體分配
整理自 c primer plus vector force1 50,60 vector force2 10,70 vector max max max force1,force2 version1 vector max const vector v1,const vector v2 version...
類物件的記憶體分配
類的大小一般是指經過例項化後類物件的大小。1真空類 長度 1 class a 2空類 長度1,同真空類。class a public a a void fun 成員函式不會影響類的大小。3簡單類,長度4 class a 4有虛函式的類 長度 4 class a 注1 虛函式表 如果基類派生類定義了虛...