this關鍵字表示當前物件本身,一般用於類的內部,其內部存在乙個位址,指向當前初始化的物件本身.
new 乙個物件時,其實產生了兩個引用,兩個引用執行同一記憶體空間(物件) 所以類中用this來表示當前物件,因為不用this,我們是不知道在建立物件時具體的物件名的
1.呼叫成員變數
用於解決成員變數與區域性變數之間二義性
2.呼叫其他例項方法
同一類中非static方法互調
3.呼叫本類其他構造方法
可以呼叫本類的其他構造方法,但是必須寫在第一句
public
person
(string name, string gender)
public
person
(string name,
int age ,string gender)
靜態方法的訪問
1.類名.靜態方法(
)(推薦方法)
2.物件.靜態方法(
)
靜態方法的特性
靜態方法中可以訪問靜態變數和類的其他靜態方法
例項方法中可以訪問靜態成員(靜態變數和靜態方法),靜態方法不能訪問例項成員
jvm載入static成員過程
1.當載入乙個類時,會進行到靜態區/方法區 ,jvm掃瞄類名.
class位元組碼檔案中的 靜態成員並分配空間初始化
2.jvm載入完class
2.1.
讀取位元組碼,讀取字段,計算字段未來需要申請的空間
2.2.讀取位元組碼,讀取方法,標記方法簽名
2.3.讀取位元組碼,判斷是否有靜態變數,有,立即分配記憶體空間
3.由於static成員是先載入的,所有靜態方法不能訪問例項成員,原因很簡單,因為靜態方法先載入,這時候例項方法還沒沒建立,所有也就無法訪問了,返回來,物件的例項方法是可以訪問靜態成員的
{} 標記的**稱為**塊
普通**塊{},一般存在於方法中,形成作用域
作用域:
作用域可以進行巢狀,內層作用域可以訪問外層作用域,反之則不能
構造**塊在類中(類的內部,方法外),構造**塊,每new乙個物件都會執行一次,在構造方法前執行
被static修飾的**塊
靜態**塊位於類的內部、方法的外部。 靜態**塊只執行一次,在構造**塊、構造方法前執行。
乙個檔案可以定義多個類,但是只能存在乙個public類,有多少個類,就存在多少份位元組碼
public
class
person
class
student
public
class
outer
}
outer和inner是包含關係。outer稱為外部類,inner稱為內部類。
內部類inner作為乙個outer的成員而存在。
內部類inner作為外部類的乙個成員而存在,inner稱為成員內部類。沒有使用static修飾的內部類,訪問內部類使用外部類的物件來訪問
一般成員內部類的訪問修飾符都是預設訪問許可權(包訪問許可權)
//定義內部類
public
class
outer
}//建立物件
public
static
void
main
(string[
] args)
成員內部類可以直接訪問 外部類的 私有成員
成員內部類被static修飾,變成了靜態內部類,作為外部類的乙個靜態成員存在
public
class
outer
}
靜態內部類可以訪問 外部類的 靜態私有成員
方法內部類只能存在於方法中,也只能在方法中建立物件
方法內部類特性
方法內部類可以讀取 方法的區域性變數,但不能修改。
當乙個類只使用一次,可以宣告匿名內部類
但是匿名內部類必須要有實現存在
public
class
test01};
animal.
showinfo()
;
new
iusb()
}.showinfo()
;
PHP 物件導向(九)
1 物件描述的配置 方法名 tostring 我們可以直接列印物件控制代碼,從而獲得該方法的基本資訊或其他內容。class my p new my echo p 輸出結果 我所要顯示的內容 2 物件方法的異常處理 方法名 call funname,arr value 呼叫一些不存在的物件方法的異常處...
php物件導向程式設計九
1 物件描述的配置 方法名 tostring 我們可以直接列印物件控制代碼,從而獲得該方法的基本資訊或其他資訊 class my p new my echo p 輸出 sssssssss 2 物件方法的異常處理 方法名 call funnam,arr value 呼叫一些不存在的物件方法的異常處理,...
九 物件導向 內部類
乙個類定義在另乙個類的內部,前者稱之為內部類,後者稱之為外部類。內部類一般用在定義它的類和語句塊內,在外部使用它時需要給出完整的名稱,且不可以與外部類的名稱相同。使用場景為當乙個事物的內部,還有乙個部分需要乙個完整的結構進行描述,而這個內 部的完整的結構又只為外部事物提供服務,那麼整個內部的完整結構...