導航:首頁 > 編程語言 > java中this的使用方法

java中this的使用方法

發布時間:2023-07-07 17:52:10

java中this關鍵字用法

1. 當成員變數和局部變數重名時,在方法中使用this時,表示的是該方法所在類中的成員變數。(this是當前對象自己)如:public class Hello {String s = "Hello";public Hello(String s) {System.out.println("s = " + s);System.out.println("1 -> this.s = " + this.s);this.s = s;//把參數值賦給成員變數,成員變數的值改變System.out.println("2 -> this.s = " + this.s);}public static void main(String[] args) {Hello x = new Hello("HelloWorld!");System.out.println("s=" + x.s);//驗證成員變數值的改變}} 結果為:s = HelloWorld!1 -> this.s = Hello2 -> this.s = HelloWorld!s=HelloWorld!在這個例子中,構造函數Hello中,參數s與類Hello的成員變數s同名,這時如果直接對s進行操作則是對參數s進行操作。若要對類Hello的成員變數s進行操作就應該用this進行引用。運行結果的第一行就是直接對構造函數中傳遞過來的參數s進行列印結果; 第二行是對成員變數s的列印;第三行是先對成員變數s賦傳過來的參數s值後再列印,所以結果是HelloWorld!而第四行是主函數中直接列印類中的成員變數的值,也可以驗證成員變數值的改變。

2.把自己當作參數傳遞時,也可以用this.(this作當前參數進行傳遞)class A {public A() {new B(this).print();// 調用B的方法}public void print() {System.out.println("HelloAA from A!");}}class B {A a;public B(A a) {this.a = a;}public void print() {a.print();//調用A的方法System.out.println("HelloAB from B!");}}public class HelloA {public static void main(String[] args) {A aaa = new A();aaa.print();B bbb = new B(aaa);bbb.print();}}結果為:HelloAA from A!HelloAB from B!HelloAA from A!HelloAA from A!HelloAB from B! 在這個例子中,對象A的構造函數中,用new B(this)把對象A自己作為參數傳遞給了對象B的構造函數。

3. 有時候,我們會用到一些內部類和匿名類,如事件處理。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。這時如果我們要使用外部類的方法和變數的話,則應該加上外部類的類名。如:public class HelloB {int i = 1;public HelloB() {Thread thread = new Thread() {public void run() {for (int j=0;j<20;j++) {HelloB.this.run();//調用外部類的方法try {sleep(1000);} catch (InterruptedException ie) {}}}}; // 注意這里有分號thread.start();}public void run() {System.out.println("i = " + i); i++;}public static void main(String[] args) throws Exception {new HelloB();}} 在上面這個例子中, thread 是一個匿名類對象,在它的定義中,它的 run 函數里用到了外部類的 run 函數。這時由於函數同名,直接調用就不行了。這時有兩種辦法,一種就是把外部的 run 函數換一個名字,但這種辦法對於一個開發到中途的應用來說是不可取的。那麼就可以用這個例子中的辦法用外部類的類名加上 this 引用來說明要調用的是外部類的方法 run。

4. 在構造函數中,通過this可以調用同一類中別的構造函數。如:public class ThisTest {ThisTest(String str) {System.out.println(str);}ThisTest() {this("this測試成功!");}public static void main(String[] args) {ThisTest thistest = new ThisTest();}} 為了更確切的說明this用法,另外一個例子為:public class ThisTest {private int age;private String str;ThisTest(String str) {this.str=str;System.out.println(str);}ThisTest(String str,int age) {this(str);this.age=age;System.out.println(age);}public static void main(String[] args) {ThisTest thistest = new ThisTest("this測試成功",25);}} 結果為:this測試成功25值得注意的是:
(1):在構造調用另一個構造函數,調用動作必須置於最起始的位置。
(2):不能在構造函數以外的任何函數內調用構造函數。
(3):在一個構造函數內只能調用一個構造函數。

5.this同時傳遞多個參數。public class TestClass {int x;int y;static void showtest(TestClass tc) {//實例化對象System.out.println(tc.x + " " + tc.y);}void seeit() {showtest(this);}public static void main(String[] args) {TestClass p = new TestClass();p.x = 9;p.y = 10;p.seeit();}} 結果為:9 10 代碼中的showtest(this),這里的this就是把當前實例化的p傳給了showtest()方法,從而就運行了。

❷ java 中this的用法

用this可以調用本類的屬性,方法,構造方法,
this(x,y,0)是用來調用public
Point3D(int
x,
int
y,
int
z)這個構造方法的,這個時候本類回的3個屬性就都有值答了:x,y是外來傳入的值,z的值直接就是0了!
為什麼要用this.x=x
,this.y=y
,
this.z=z,是為了區分外來的值名與本類下屬性名的重名,this.x就是調用的屬性!
還可以調用方法,如:this.方法名(),這樣就調用本類下的這個方法!

❸ java中this的用法

一、指自己所在的對象。
比如在一個方法中,調用其他對象的變數或方法時,可以使用那個對象的對象名,比如aa.abc();
而調用自己所在對象的方法或變數時,不知道別人給起了什麼名,所以直接用this.abc()就可以了。
二、看一個小例子中「this」的用法!

/**

* @author feng-neusoft

*

* 本示例為了說明this的三種用法!

*/

package test;

public class ThisTest {

private int i=0;

//第一個構造器:有一個int型形參

ThisTest(int i){

this.i=i+1;//此時this表示引用成員變數i,而非函數參數i

System.out.println("Int constructor i——this.i: "+i+"——"+this.i);

System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));

//從兩個輸出結果充分證明了i和this.i是不一樣的!

}

// 第二個構造器:有一個String型形參

ThisTest(String s){

System.out.println("String constructor: "+s);

}

// 第三個構造器:有一個int型形參和一個String型形參

ThisTest(int i,String s){

this(s);//this調用第二個構造器

//this(i);

/*此處不能用,因為其他任何方法都不能調用構造器,只有構造方法能調用他。

但是必須注意:就算是構造方法調用構造器,也必須為於其第一行,構造方法也只能調

用一個且僅一次構造器!*/

this.i=i++;//this以引用該類的成員變數

System.out.println("Int constructor: "+i+"/n"+"String constructor: "+s);

}

public ThisTest increment(){

this.i++;

return this;//返回的是當前的對象,該對象屬於(ThisTest)

}

public static void main(String[] args){

ThisTest tt0=new ThisTest(10);

ThisTest tt1=new ThisTest("ok");

ThisTest tt2=new ThisTest(20,"ok again!");

System.out.println(tt0.increment().increment().increment().i);

//tt0.increment()返回一個在tt0基礎上i++的ThisTest對象,

//接著又返回在上面返回的對象基礎上i++的ThisTest對象!

}

}

運行結果:

Int constructor i——this.i: 10——11

String constructor: ok

String constructor: ok again!

Int constructor: 21

String constructor: ok again!

14

細節問題注釋已經寫的比較清楚了,總結一下,其實this主要要三種用法:

1、表示對當前對象的引用!

2、表示用類的成員變數,而非函數參數,注意在函數參數和成員變數同名是進行區分!其實這是第一種用法的特例,比較常用,所以那出來強調一下。

3、用於在構造方法中引用滿足指定參數類型的構造器(其實也就是構造方法)。但是這里必須非常注意:只能引用一個構造方法且必須位於開始!

還有就是注意:this不能用在static方法中!所以甚至有人給static方法的定義就是:沒有this的方法!雖然誇張,但是卻充分說明this不能在static方法中使用!

❹ java中this的作用及用法是什麼

使用this調用本類中的屬性

現在觀察以下代碼,看會有那些問題:

public void setName(String name){

name = name ;

}

這裡面的兩個name都是setName方法中的name參數。

此時,特別希望可以通過一個指定的標識明確的表示要把傳入的name參數的值給類中的屬性,所以此時就需要使用this關鍵字,使用this.name就表示類中的屬性。

class Person{

private String name ;

private int age ;

public Person(String name,int age){

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年齡:"+this.age) ;

}

};

public class Demo35{

public static void main(String args[]){

Person p1 = new Person("張三",30) ;

p1.print() ;

}

};

使用this還可以從一個構造方法中調用其他構造方法。

例如:有以下一個要求,一個類中存在了三個構造方法,但是要求,不管怎麼調用,最終都要求可以在對象實例化的時候列印一個「新的對象產生了」的提示。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的對象產生了。。。") ;

}

public Person(String name){

System.out.println("新的對象產生了。。。") ;

this.setName(name) ;

}

public Person(String name,int age){

System.out.println("新的對象產生了。。。") ;

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年齡:"+this.age) ;

}

};

以上代碼雖然可以實現功能,但是同樣的代碼出現了三次,而且後面的兩次出現純屬多餘吧。用this()的形式可以調用類中的無參構造方法。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的對象產生了。。。") ;

}

public Person(String name){

// 最終都是調用無參構造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年齡:"+this.age) ;

}

};

public class Demo36{

public static void main(String args[]){

Person p1 = new Person("張三",30) ;

p1.print() ;

}

};

注意點1:

如果使用了this調用其他構造方法,則此語句,必須寫在構造方法的首行。

public void fun(){

// 發現在調用fun方法的時候,必須先設置name的值

this("zhangsan") ;

}

public Person(String name,int age){

this.setAge(age) ;

this(name) ; //--> 必須放在首行

}

注意點2:

使用this可以調用本類中的其他構造方法,但是至少留一個構造方法,作為程序的出口。

public Person(){

this("a",10) ;

System.out.println("新的對象產生了。。。") ;

}

public Person(String name){

// 最終都是調用無參構造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ; //--> 必須放在首行

this.setAge(age) ;

}

this最重要的特性 —— 表示當前對象

當前對象在程序中用以下形式體現:

· 當前操作此方法的對象,就稱為當前對象。

class Demo{

public void print(){

System.out.println(this) ;

}

};

public class Demo38{

public static void main(String args[]){

Demo d1 = new Demo() ;

System.out.println(d1) ;

d1.print() ;

System.out.println("---------------------") ;

Demo d2 = new Demo() ;

System.out.println(d2) ;

d2.print() ;

}

};

回顧:

之前講解的兩個對象比較的程序。

// 在類的內部增加一個比較的方法

public boolean compare(Person p){

Person p1 = this ;

Person p2 = p ;

if(p1.name.equals(p2.name)&&p1.age==p2.age){

return true ;

}else{

return false ;

}

}

分析程序的運行過程:

class A{

private B b = null ;

public A(){

this.b = new B(this) ;

this.b.fun() ;

}

public void hello(){

System.out.println("Hello World!!!") ;

}

};

class B{

private A a = null ;

public B(A a){

this.a = a ;

}

public void fun(){

this.a.hello() ;

}

};

public class OODemo40{

public static void main(String args[]){

A aa = new A() ;

}

};

❺ Java中this的作用和用法以及含義!

this指直譯是「這個」,在java中指「當前的」。不管在哪裡,只要用到this,指的一定就是當前的這個對象。最常見的用法是在寫java bean中。比如下面的代碼

publicclassStudent{
privateStringname;
privateintage;
publicStudent(){}
publicStudent(Stringname,intage){
this();
this.setName(name);
this.age=age;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnthis.age;
}
}

上面的代碼是一個java bean。所謂的java bean就是一個類,這個類有一些屬性,方法只有這些屬性的Getter 或者Setter (從Object類繼承的方法不算在此列)。

這個bean有兩個屬性,在構造器中為屬性賦值的時候寫的this.setName(name).意思是調用當前你創建的這個對象的Setter給這個對象的屬性賦值。而setName裡面的this.name = name;這一句,等號之前的this.name表示當前對象的name,也就是在類裡面定義的private String name這個變數,而等號之後的name表示從外界調用這個方法時候傳進來的參數。所以這句話的意思就是將外界傳來的字元串變數的值賦給當前對象的name屬性。

那麼構造器第一行的this()是做什麼的呢?這句話是調用當前這個對象的無參構造,就是調用上面的public Student(){}這個構造器。在這段代碼里this()體現不出來什麼作用。但是我們知道構造器的作用是在構造對象的時候給屬性賦值的。如果上面個無參構造裡面寫一些賦值語句的話那麼這里就可以避免代碼的重復了。但是請注意,調用this()的時候一定要寫在該方法的第一行,否則會報錯。

另外,this關鍵字不能使用在有static關鍵字修飾的方法和代碼塊裡面。因為static是這個類的所有對象共用的,而this指的只是當前這個對象的「私人」的一些東西,在屬性上面就沖突了。


說到this就得順帶提一下super關鍵字了。super關鍵字的用法同this差不多,同樣不能與static一起使用。同樣有super()的寫法,且需要寫在方法第一行。但是super所指示的東西可不一樣,一般指的是當前這個類的直接父類。如果在子類中需要使用父類的構造器或者屬性的時候可以使用super關鍵字。比如下面的代碼:

{
publicStudent(){
super();
}
@Override
publicbooleanequals(Objectobj){
returnsuper.equals(obj);
}
}

上面這段代碼就是在實現equals方法的時候調用其直接父類的Object類的equals方法。而在構造這個類的對象的時候也調用了其父類的構造方法。

註:上面代碼中的extends Object其實完全不必寫,因為所有的類都直接或者間接是Object類的子類(除了Object類本身)。如果不寫extends的話默認繼承Object類。這里為了需要所以這樣寫

閱讀全文

與java中this的使用方法相關的資料

熱點內容
計算機程序用什麼編程語言 瀏覽:324
linux入門常用命令 瀏覽:497
江寧區哪裡有數控編程培訓 瀏覽:778
java寫一個shape形狀類 瀏覽:744
win7如何設置word背景顏色 瀏覽:484
如何創造電腦編程語言 瀏覽:56
昂達平板電腦圖形密碼忘記怎麼辦 瀏覽:92
組織文件內容是什麼 瀏覽:183
0基礎如何學習智能編程 瀏覽:366
java程序員全攻略下載 瀏覽:715
網路逆向教程 瀏覽:135
iso文件如何重裝系統 瀏覽:750
ghost鏡像文件路徑如何恢復 瀏覽:832
搭建網站需要多少錢啊 瀏覽:599
編程貓怎麼設置背景亮度 瀏覽:177
qq文件破損 瀏覽:414
javapoi配置 瀏覽:608
編程怎麼寫數據圖案同步 瀏覽:308
海康監控錄像回放丟數據怎麼回事 瀏覽:155
in後綴是什麼文件 瀏覽:142

友情鏈接