this關(guān)鍵字
對象創(chuàng)建的過程和this的本質(zhì)
構(gòu)造方法是創(chuàng)建java對象的重要途徑,通過new關(guān)鍵字調(diào)用構(gòu)造器時,構(gòu)造器也確實返回了該類的對象,但這個對象并不是完全由構(gòu)造器負(fù)責(zé)創(chuàng)建的。創(chuàng)建一個對象分為如下四步:
1.?分配對象空間,并將對象成員變量初始化為0或空
2.?執(zhí)行屬性值的顯示初始化
3.?執(zhí)行構(gòu)造方法
4.?返回對象的地址給相關(guān)的變量
this的本質(zhì)就是“創(chuàng)建好的對象的地址”!??由于在構(gòu)造方法調(diào)用前,對象已經(jīng)創(chuàng)建。因此,在構(gòu)造方法中也可以使用this代表“當(dāng)前對象”?。
this最常的用法:
1.在程序中產(chǎn)生二義性之處,應(yīng)使用this來指明當(dāng)前對象;普通方法中,this總是指向調(diào)用該方法的對象。構(gòu)造方法中,this總是指向正要初始化的對象。
2.使用this關(guān)鍵字調(diào)用重載的構(gòu)造方法,避免相同的初始化代碼。但只能在構(gòu)造方法中用,并且必須位于構(gòu)造方法的第一句。
3.this不能用于static方法中。?
【示例?1】this代表“當(dāng)前對象”示例
?public?class?? User {
????int?id;???????????//id
??? String?name;??//賬戶名
??? String?pwd; ??//密碼??
????public?? User() {
??? }
????public?? User(int?id, String name) {
?????? System.out.println("正在初始化已經(jīng)創(chuàng)建好的對象:"+this);
???????this.id?= ? id;???//不寫this,無法區(qū)分局部變量id和成員變量id
???????this.name?= ? name;
??? }
????public?void?? login(){
?????? System.out.println(this.name+",要登錄!");??//不寫this效果一樣
??? }
????public?static?void?? main(String[] args) {
?????? User? u3 =?new?? User(101,"高小七");
?????? System.out.println("打印高小七對象:"+u3);
?????? u3.login();
??? }
}

? ?示例1運(yùn)行效果
【示例?2】this()調(diào)用重載構(gòu)造方法
public?class?? TestThis {?
????int?a,b,c;
??? TestThis(){
?????? System.out.println("正要初始化一個Hello對象");
??? }
??? TestThis(int?a,int?? b){
???????//TestThis();??? //這樣是無法調(diào)用構(gòu)造方法的!
???????this();???//調(diào)用無參的構(gòu)造方法,并且必須位于第一行!
???????a = a;//這里都是指的局部變量而不是成員變量
???????this.a?= ? a;//這樣就區(qū)分了成員變量和局部變量.??這種情況占了this使用情況的大多數(shù)!
???????this.b?= ? b;
??? }
??? TestThis(int?a,int?b,int?c){
???????this(a,b);????//調(diào)用帶參的構(gòu)造方法,并且必須位于第一行!
???????this.c?= ? c;
??? }
????void?? sing(){}
??? ?void?? chifan(){
???????this.sing();????//調(diào)用本類中的sing();
?????? System.out.println("你媽媽喊你回家吃飯!");
??? }
????public?static?void?? main(String[] args){
?????? TestThis hi =?new?? TestThis(2,3);
?????? hi.chifan();
??? }??
}?
static關(guān)鍵字
在類中,用static聲明的成員變量為靜態(tài)成員變量,也稱為類變量。?類變量的生命周期和類相同,在整個應(yīng)用程序執(zhí)行期間都有效。它有如下特點:
1.它為該類的公用變量,屬于類,被該類的所有實例共享,在類被載入時被顯式初始化。
2.對于該類的所有對象來說,static成員變量只有一份。被該類的所有對象共享??!
3.一般用“類名.類屬性/方法”來調(diào)用。(也可以通過對象引用或類名(不需要實例化)訪問靜態(tài)成員。)
4.所以在static方法中不可訪問非static的成員。?
【示例3】static關(guān)鍵字的使用
?public?class?? User {
????int?id;???????????//id
??? String?name;??//賬戶名
??? String?pwd; ??//密碼
????static?? String?company="北京尚學(xué)堂";?//公司名稱
????public?? User(int?id, String name) {
???????super();
???????this.id?= ? id;
???????this.name?= ? name;
??? }
????public?void?? login(){
?????? System.out.println("登錄:"+name);
??? }
????public?static?void?? printCompay(){
//???? login();//調(diào)用非靜態(tài)成員,編譯就會報錯
?????? System.out.println(company);
??? }
????public?static?void?? main(String[] args) {
?????? User??u3?=?new?? User(101,"高小七");
?????? User.printCompay();
?????? User.company?=?"北京阿里爺爺";
?????? User.printCompay();
??? }
}
?示例3?運(yùn)行結(jié)果圖?
?示例3?內(nèi)存分析圖
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗,曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計及研發(fā)工作,從小白逐漸做到工程師、高級工程師、架構(gòu)師。精通Java平臺軟件開發(fā),精通JAVAEE,熟悉各種流行開發(fā)框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數(shù)據(jù)庫從入門到精通
C-手刃移動前端和Web前端?
D-J2EE從了解到實戰(zhàn)
E-Java高級框架精解
F-Linux和Hadoop?