① java中this關鍵字的作用
你好,很高興回答你的銷老問題。
this用來代指當前對象,可以用來訪問當前對象信叢的方法和成員變數。
如果有幫滑斗櫻助到你,請點擊採納。
② java中this的關鍵字用法是什麼
一、this關鍵字主要有三個應用:
(1)this調用本類中的屬性,也就是類中的成員變數;
(2)this調用本類中的其他方法;
(3)this調用本類中的其他構造方法,調用時要放在構造方法的首行。
Public Class Student {
String name; //定義一個成員變數name
private void SetName(String name) { //定義一個參數(局部變數)name
this.name=name; //將局部變數的值傳遞給成員變數
}
}
應用一:引用成員變數
如上面這段代碼中,有一個成員變數name,同時在方法中有一個形式參數,名字也是name,然後在方法中將形式參數name的值傳遞給成員變數name,雖然我們可以看明白這個代碼的含義,但是作為Java編譯器它是怎麼判斷的呢?到底是將形式參數name的值傳遞給成員變數name,還是反過來將成員變數name的值傳遞給形式參數name呢?也就是說,兩個變數名字如果相同的話,那麼Java如何判斷使用哪個變數?此橘睜時this這個關鍵字就起到作用了。this這個關鍵字其代表的就是對象中的成員變數或者方法。也就是說,如果在某個變數前面加上一個this關鍵字,其指的就是這個對象的成員變數或者方法,而不是指成員方法的形式參數或者局部變數。為此在上面這個代碼中,this.name代表的就是對象中的成員變數,又叫做對象的屬性,而後面的name則是方法的形式參數,代碼this.name=name就是將形式參數的值傳遞給成員變數。這就是上面這個代碼的具體含義。
一般情況下,在Java語言中引用成員變數或者成員方法都是以對象名.成員變數或者對象名.成員方法的形式。不過有些程序員即使在沒有相同變數的時候,也喜歡使用this.成員變數的形式來引用變數,這主要是從便於代碼的閱讀考慮的。一看到這個this關鍵字就知道現在引用的變數是成員變數或者成員方法,而不是局部變數。這無形中就提高了代碼的閱讀性。不過話說回來,這是this關鍵字在Java語言中的最簡單的應用。從這個應用中,我們可以看出this關鍵字其代表的就是對象的名字。
其實如果是局部變數的話,也是相同的道理。如在上面的代碼中,name不是形式參數,而是一個局部變數。此時Java也會遇到相同的疑惑,即變數名name代表的到底是局部變數還是形式參數?name=name到底代表的是什麼含義?根據局部變數的作用域,在方法內部,如果局部變數與成員變數同名的話,那麼是以局部變數為准。可是在name=name這個賦值語句中,將局部變數的值賦值給自己,顯然並不是很合適。根芹陸據代碼的含義,本來的意思應該是將局部變數賦值給成員變數。為了更清晰的表達這個含義,為此最好採用如下的書寫格式this.name=name。這里的this關鍵字含義就是對象名student,為此this.name就表示student.name。
應用二:調用類的構造方法
public class Student { //定義一個類,類的名字為student。
public Student() { //定義一個方法,名字與類相同故為構造方法
this(「Hello!」);
}
public Student(String name) { //定義一個帶形式參數的構造方法
}
}
this關鍵字除了可以調用成員變數之外,還可以調用構造方法。在一個Java類中,其方法可以分為成員方法和構造方法兩種。構造方法是一個與類同名的方法,在Java類中必須存在一個構造方法。如果在代碼中沒有顯示的體現構造方法的話,那麼編譯器在編譯的時候會自動添加一個圓首歲沒有形式參數的構造方法。這個構造方法跟普通的成員方法還是有很多不同的地方。如構造方法一律是沒有返回值的,而且也不用void關鍵字來說明這個構造方法沒有返回值。而普通的方法可以有返回值、也可以沒有返回值,程序員可以根據自己的需要來定義。不過如果普通的方法沒有返回值的話,那麼一定要在方法定義的時候採用void關鍵字來進行說明。其次構造方法的名字有嚴格的要求,即必須與類的名字相同。也就是說,Java編譯器發現有個方法與類的名字相同才把其當作構造方法來對待。而對於普通方法的話,則要求不能夠與類的名字相同,而且多個成員方法不能夠採用相同的名字。在一個類中可以存在多個構造方法,這些構造方法都採用相同的名字,只是形式參數不同。Java語言就憑形式參數不同來判斷調用那個構造方法。
在上面這段代碼中,定義了兩個構造方法,一個帶參數,另一個沒有帶參數。構造方法都不會有返回值,不過由於構造方法的特殊性,為此不必要在構造方法定義時帶上void關鍵字來說明這個問題。在第一個沒有帶參數的構造方法中,使用了this(「Hello!」)這句代碼,這句代碼表示什麼含義呢?在構造方法中使this關鍵字表示調用類中的構造方法。如果一個類中有多個構造方法,因為其名字都相同,跟類名一致,那麼這個this到底是調用哪個構造方法呢?其實,這跟採用其他方法引用構造方法一樣,都是通過形式參數來調用構造方法的。如上例中,this關鍵字後面加上了一個參數,那麼就表示其引用的是帶參數的構造方法。如果現在有三個構造方法,分別為不帶參數、帶一個參數、帶兩個參數。那麼Java編譯器會根據所傳遞的參數數量的不同,來判斷該調用哪個構造方法。從上面示例中可以看出,this關鍵字不僅可以用來引用成員變數,而且還可以用來引用構造方法。
不過如果要使用這種方式來調用構造方法的話,有一個語法上的限制。一般來說,利用this關鍵字來調用構造方法,只有在無參數構造方法中第一句使用this調用有參數的構造方法。否則的話,翻譯的時候,就會有錯誤信息。這跟引用成員變數不同。如果引用成員變數的話,this關鍵字是沒有位置上的限制的。如果不熟悉這個限制的話,那麼還是老老實實的採用傳統的構造方法調用方式為好。雖然比較麻煩,但是至少不會出錯。
應用三:返回對象的值
this關鍵字除了可以引用變數或者成員方法之外,還有一個重大的作用就是返回類的引用。如在代碼中,可以使用return this,來返回某個類的引用。此時這個this關鍵字就代表類的名稱。如代碼在上面student類中,那麼代碼代表的含義就是return student。可見,這個this關鍵字除了可以引用變數或者成員方法之外,還可以作為類的返回值,這才是this關鍵字最引人注意的地方。
③ java中this的關鍵字用法是什麼
Java關鍵字this只哪雹擾能用於方法方法體內。當一個對象創建後,Java虛擬機(JVM)就會給這個對象分配一個引用自身的指針,這個指針的名字就是 this。
this主要要三種用法:
表示對當前對象的引用。
表示用類的成員變數,而非函數參數李旦,注意在函數參數和成員變數同名是進行區分。這是第一種用法的特例,比較常用。
用於在構肆談造方法中引用滿足指定參數類型的構造器(其實也就是構造方法)。注意:只能引用一個構造方法且必須位於開始。
this不能用在static方法中!有人給static方法的定義:沒有this的方法。
④ java 中this關鍵字的作用是什麼
this在java
中的雹陵作用和它的詞義很接近,在搭攔函數內部就是這個函數所屬的源枝戚對象的引用變數.
⑤ java中this的作用
使用this調用本類中的屬性\x0d\x0a\x0d\x0a現在觀察以下代碼,看會有那些問題:\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0aname = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a這裡面的兩個name都是setName方法中的name參數。\x0d\x0a\x0d\x0a此脊銷時,特別希望可以通過一個指定的標識明確的表示要把傳入的name參數的值給類中的屬性,所以此時就需要使用this關鍵字,使用this.name就表示類中的屬性。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name ;\x0d\x0a\x0d\x0aprivate int age ;\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age ;\x0d\x0a\x0d\x0a}\旁野激x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年齡:"+this.age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo35{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1 = new Person("張三",30) ;\x0d\x0a\x0d\x0ap1.print() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a使用this還可以從一個構造方法中調用其他構造方法。\x0d\x0a\x0d\x0a例如:有以下一個要求,一個類中存在了三個構造方法,但是要求,不管怎麼調用,最終都要求可以在對象實例化的時候列印一個「新的對象產生了」的提示。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name ;\x0d\x0a\x0d\x0aprivate int age ;\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的對象產生了。。。") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0aSystem.out.println("新的對象產生了。。。") ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0a}\x0d\運襪x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0aSystem.out.println("新的對象產生了。。。") ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年齡:"+this.age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a以上代碼雖然可以實現功能,但是同樣的代碼出現了三次,而且後面的兩次出現純屬多餘吧。用this()的形式可以調用類中的無參構造方法。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name ;\x0d\x0a\x0d\x0aprivate int age ;\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的對象產生了。。。") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a// 最終都是調用無參構造方法\x0d\x0a\x0d\x0athis() ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name) ;\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年齡:"+this.age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo36{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1 = new Person("張三",30) ;\x0d\x0a\x0d\x0ap1.print() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a注意點1:\x0d\x0a\x0d\x0a如果使用了this調用其他構造方法,則此語句,必須寫在構造方法的首行。\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0a// 發現在調用fun方法的時候,必須先設置name的值\x0d\x0a\x0d\x0athis("zhangsan") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0athis(name) ; //--> 必須放在首行\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a注意點2:\x0d\x0a\x0d\x0a使用this可以調用本類中的其他構造方法,但是至少留一個構造方法,作為程序的出口。\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0athis("a",10) ;\x0d\x0a\x0d\x0aSystem.out.println("新的對象產生了。。。") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a// 最終都是調用無參構造方法\x0d\x0a\x0d\x0athis() ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name) ; //--> 必須放在首行\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0athis最重要的特性 —— 表示當前對象\x0d\x0a\x0d\x0a當前對象在程序中用以下形式體現:\x0d\x0a\x0d\x0a· 當前操作此方法的對象,就稱為當前對象。\x0d\x0a\x0d\x0aclass Demo{\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println(this) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo38{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aDemo d1 = new Demo() ;\x0d\x0a\x0d\x0aSystem.out.println(d1) ;\x0d\x0a\x0d\x0ad1.print() ;\x0d\x0a\x0d\x0aSystem.out.println("---------------------") ;\x0d\x0a\x0d\x0aDemo d2 = new Demo() ;\x0d\x0a\x0d\x0aSystem.out.println(d2) ;\x0d\x0a\x0d\x0ad2.print() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a回顧:\x0d\x0a\x0d\x0a之前講解的兩個對象比較的程序。\x0d\x0a\x0d\x0a// 在類的內部增加一個比較的方法\x0d\x0a\x0d\x0apublic boolean compare(Person p){\x0d\x0a\x0d\x0aPerson p1 = this ;\x0d\x0a\x0d\x0aPerson p2 = p ;\x0d\x0a\x0d\x0aif(p1.name.equals(p2.name)&&p1.age==p2.age){\x0d\x0a\x0d\x0areturn true ;\x0d\x0a\x0d\x0a}else{\x0d\x0a\x0d\x0areturn false ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a分析程序的運行過程:\x0d\x0a\x0d\x0aclass A{\x0d\x0a\x0d\x0aprivate B b = null ;\x0d\x0a\x0d\x0apublic A(){\x0d\x0a\x0d\x0athis.b = new B(this) ;\x0d\x0a\x0d\x0athis.b.fun() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void hello(){\x0d\x0a\x0d\x0aSystem.out.println("Hello World!!!") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0aclass B{\x0d\x0a\x0d\x0aprivate A a = null ;\x0d\x0a\x0d\x0apublic B(A a){\x0d\x0a\x0d\x0athis.a = a ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0athis.a.hello() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class OODemo40{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aA aa = new A() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};
⑥ 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!");
}
}
運行結果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
在這個例子中,構造函數Hello中,參數s與類Hello的變數s同名,這時直接對s進行操作則是對參數s進行操作。對類Hello的成員變數s進行操作就應該用this進行引用。運行結果的第一行就是直接對構造函數中傳遞過來的參數s進行列印結果;
第二行是對成員變數s的列印;第三行是先對成員變數s賦傳過來的參數s值後再列印,所以結果是HelloWorld!
2. this作為參數傳遞
當你要把自己作為參數傳遞給別的對象時如:
public class A {
public A() {
new B(this).print();
}
public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;
public B(A a) {
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
運行結果:
Hello from A!
Hello from B!
在這個例子中,對象A的構造函數中,new
B(this)把對象A作為參數傳遞給了對象B的構造函數。
⑦ JAVA關鍵字this是干什麼的
我想這個 this 在考納指試中不會很重要吧
僅用於 C/C++、C# 和 Visual Basic。
「This」和「Me」窗口相同;只是名稱不同,這對程序員有幫助作用。這兩個窗口都顯示三個信息列:
名稱
在 C/C++ 或 C# 中顯示 this 指針指向的對象,在 Visual Basic 中顯示 me 對象。樹控制項 (Tree Control) 允許展開對象以查看元洞肢配素。展開對象後,每個元素的名稱顯示在該列中。
值
顯示每個變數包含的值。默認情況下,整數變數以十進制格式表示。可以在「選項」對話框 ->「調試」->「常規」中將表示形式更改為十六進制,也可以通過右擊「自動窗口」並從快捷菜單中選擇「十六進制飢雀顯示」選項來進行此操作。
類型
標識「名稱」列中列出的每一變數的數據類型。
⑧ java 中this關鍵字的作用,求詳細的解答
this 關鍵字只能在方法內部使用,表示"對調用方法的那個對象"的引用.this的用法和其他對象的引用並散唯無不同.但要注意,如果在方法內部調用同一個類的另一個方法,就不必使用this,直接絕念調用即可.當前方法中的this應用會自動應用於同一類中的其他方法.
this關鍵字對於將當前對象傳遞給其他方法很有用.
可用this關鍵字在一個構造器中引用另一個沖宏培構造器,避免代碼重復.
⑨ Java裡面的this關鍵字是什麼意思
this關鍵字可以簡單的理解為,誰調用this所在的方法,this就是誰。
類的構造函數與getter、setter方法常用到this關鍵字(JavaBean)
JavaBean是一種可重用的Java組件,它可以被Applet、Servlet、SP等Java應用程序調用.也可以可視化地被Java開發工具使用。它包含屬性(Properties)、方法(Methods)、事件(Events)等特性。
public class Person {
//==========靜態屬性===========
//--想學編程的可以來我這看看----
private String name; //姓名
private int age; //年齡
private String gender; //性別
//==========動態行為===========
public void readBook(String book) {
System.out.println("reading " + book);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//this.name就是上面的private String name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
官方定義
this 是自身的一個對象,代表對象本身,可以理解為:指向對象本身的一個指針。
this 的用法在 Java 中大體可以分為3種:
1.普通的直接引用
這種就不用講了,this 相當於是指向當前對象本身。
2.形參與成員名字重名,用 this 來區分:
class Person {
private int age = 10;
public Person(){
System.out.println("初始化年齡:"+age);}
public int GetAge(int age){
this.age = age;
return this.age;
}
}
public class test1 {
public static void main(String[] args) {
Person Harry = new Person();
System.out.println("Harry's age is "+Harry.GetAge(12));
}
}
希望對您有所幫助!~