通常情況下,我只在構造函數使用this
。什麼是「本」在Java中的含義是什麼?
我明白,這是用來標識參數變量(通過使用this.something
),如果它有一個全局變量相同的名稱。
但是,我不知道this
在Java中的真正意義,以及如果我使用this
沒有點(.
)會發生什麼。
通常情況下,我只在構造函數使用this
。什麼是「本」在Java中的含義是什麼?
我明白,這是用來標識參數變量(通過使用this.something
),如果它有一個全局變量相同的名稱。
但是,我不知道this
在Java中的真正意義,以及如果我使用this
沒有點(.
)會發生什麼。
它是指特定對象的當前實例,所以你可以編寫類似
public Object getMe() {
return this;
}
調用它時要小心使用正確的樣式:o.getMe()。getMe().outOfHere() – 2010-09-16 15:31:09
這是「一個在當前上下文對象引用」有效。例如,要打印出「這個對象」你可能會這樣寫:
System.out.println(this);
請注意,您的「全局變量」的使用是有點過......如果你使用this.variableName
然後通過定義它不一全局變量 - 它是特定於此特定實例的變量。
快速谷歌搜索帶來了這樣的結果:http://xahlee.org/java-a-day/this.html
差不多了「this」關鍵字是當前對象(自身)的引用。
這可以某些方法或構造內使用。
它返回參照當前對象。
它指的是在其上調用方法
class A {
public boolean is(Object o) {
return o == this;
}
}
A someA = new A();
A anotherA = new A();
someA.is(someA); // returns true
someA.is(anotherA); // returns false
this
指當前對象的實例。
每個非靜態方法運行在一個對象的上下文。所以,如果你有一個這樣的類:
public class MyThisTest {
private int a;
public MyThisTest() {
this(42); // calls the other constructor
}
public MyThisTest(int a) {
this.a = a; // assigns the value of the parameter a to the field of the same name
}
public void frobnicate() {
int a = 1;
System.out.println(a); // refers to the local variable a
System.out.println(this.a); // refers to the field a
System.out.println(this); // refers to this entire object
}
public String toString() {
return "MyThisTest a=" + a; // refers to the field a
}
}
然後調用frobnicate()
上new MyThisTest()
將因此有效地打印
1 42 MyThisTest a=42
您使用它的許多內容:
這不起作用。我得到一個錯誤,說需要一個'main'方法。如果我添加主要方法,那麼我必須從那裏調用。任何試圖在main中調用frobnicate()的方法都表示你不能從靜態引用中調用非靜態引用。並且從'main'中移除靜態函數會再次返回錯誤,表示沒有找到主要方法。請解釋。 – dbconfession 2014-09-11 21:34:26
@dbconfession:這裏的代碼不是作爲一個獨立的自運行程序。你的意思是*閱讀*代碼* **和**文本,而不是運行它!它是有效的代碼,但它僅用於演示目的(這就是爲什麼它沒有合適的主體)。有關主要方法的幫助,請參閱http://stackoverflow.com/questions/146576/why-is-the-java-main-method-static。 – 2014-09-12 12:40:55
@Joachim謝謝!我錯過了一些基本的東西,它意味着讓一個方法變成靜態的,以及'this.'如何工作。我的理解是,'this.'允許你調用一個方法或變量,這個方法或變量對於類的實例化版本是唯一的,允許另一個方法或變量版本存在,而不會調用'this.'。在一個簡單的調用'Test.class'我有兩個方法:'公共靜態無效的主要()'和'公共測試()'我不能在方法之間傳遞信息,因爲'main'是靜態的,並且構造函數不能靜態。我應該發佈一個新問題嗎? – dbconfession 2014-09-12 20:32:23
在揮杆的相當普遍編寫實現ActionListener
一類,並添加當前實例(即「本」),作爲一個ActionListener組件。
public class MyDialog extends JDialog implements ActionListener
{
public MyDialog()
{
JButton myButton = new JButton("Hello");
myButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
System.out.println("Hurdy Gurdy!");
}
}
以下是here副本&粘貼,但解釋this
關鍵字的非常好所有不同的用途:
定義:Java的this
關鍵字用於在參考該方法的當前實例它被使用。
以下是使用這種方式:
要明確表示實例變量是用來代替靜態或局部變量。也就是,
private String javaFAQ;
void methodName(String javaFAQ) {
this.javaFAQ = javaFAQ;
}
這裏指的是實例變量。這裏局部變量的優先級很高。因此,缺少this
表示局部變量。如果作爲參數名稱的局部變量與實例變量不相同,則不管是否使用this
,它都表示實例變量。
This
用於指構造函數
public JavaQuestions(String javapapers) {
this(javapapers, true);
}
這調用它有兩個參數相同的Java類的構造函數。
This
用於當前的Java實例傳遞的參數
obj.itIsMe(this);
類似上述這也可以用來返回當前實例
CurrentClassName startMethod() {
return this;
}
注:這可能會導致在以上兩點中用於內部課堂時會導致不良結果。因爲這將引用內部類而不是外部實例。
This
可以用來獲得當前類
Class className = this.getClass(); // this methodology is preferable in java
的手柄雖然這可以通過
Class className = ABC.class; // here ABC refers to the class name and you need to know that!
一如往常進行,this
與它的實例相關聯,這在靜態方法中不起作用。
我希望我能夠upvote 10次,尤其是第一和第五點。我一直努力瞭解'這個'的意義,直到我找到這個爲止。精緻! – 2014-01-13 13:01:41
如果你打電話myObject.method()
那麼this
將指裏面method
。
是完整的,this
也可用於指外對象
class Outer {
class Inner {
void foo() {
Outer o = Outer.this;
}
}
}
這是我正在尋找的! ;) – forresthopkinsa 2017-06-27 18:32:29
對象有方法和屬性被從類派生的(變量),以指定哪些方法和變量屬於使用了一個特定的對象this
保留字。在實例變量的情況下,理解隱式參數和顯式參數之間的差異非常重要。看看fillTank
呼叫audi
對象。
Car audi= new Car();
audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter
在括號中的值是隱式的參數和對象本身是明確的參數,不具有明確的參數,使用隱式參數的方法,該方法fillTank
同時具有顯式和隱式參數。
讓我們在fillTank
方法在Car
類
public class Car()
{
private double tank;
public Car()
{
tank = 0;
}
public void fillTank(double gallons)
{
tank = tank + gallons;
}
}
仔細一看這節課,我們有一個實例變量「坦克」。可能有很多對象使用了tank實例變量,爲了指定實例變量「tank」用於特定對象,在我們的例子中,我們使用了前面構建的「audi」對象,我們使用this
保留關鍵字。對於實例變量在方法中使用「this」指示實例變量(在本例中爲「tank」)是隱式參數的實例變量。
java編譯器會自動添加this
保留字,所以您不必添加它,這是一個偏好問題。你不能使用沒有點(。)的this
,因爲這些是java的規則(語法)。
綜上所述。
this
表明,實例變量屬於隱式參數,或者說,它是隱式參數的實例變量。this
不能沒有點(。)這是句法無效this
還可以使用的局部變量來區分使用和具有相同名稱的全局變量this
保留字也適用於方法,用於指示方法屬於特定對象。的此關鍵字被用於指一個塊的當前可變的,例如考慮下面的代碼(只是一exampple,所以不要指望標準Java代碼):
Public class test{
test(int a) {
this.a=a;
}
Void print(){
System.out.println(a);
}
Public static void main(String args[]){
test s=new test(2);
s.print();
}
}
那它。輸出將是「2」。 如果我們沒有使用這個關鍵字,那麼輸出將是:0
如果作爲在構造函數中聲明的變量,然後我們用實例變量相同的「本」來分配數據。
class Example{
int assign;// instance variable
Example(int assign){ // variable inside constructor
this.assign=assign;
}
}
希望這有助於。
在Java中,「this」是一個預定義的變量。如果我們在方法中使用「this」,這意味着我們正在獲取當前運行對象的引用(地址)。舉一個例子。
this.age --->當前運行對象的年齡。
給回覆者:http://meta.stackexchange.com/questions/15775/do-you-delete-your-own-answer-when-its-a-duplicate – BalusC 2010-09-16 15:19:35
Yakshemash! SO朋友。你可能想在這裏引用我的問題 - https://stackoverflow.com/questions/23334336/this-in-java-exception-in-thread-main-java-lang-stackoverflowerror Chenqui。 – 2014-04-28 17:16:34