public class example {
int a = 0;
public void m() {
int b = this.a;
}
public static void main(String[] args) {
int c = this.a;
}
}
我是java新手。爲什麼我不能在主要方法中使用「this」?爲什麼不能在主要方法中使用「this」?
public class example {
int a = 0;
public void m() {
int b = this.a;
}
public static void main(String[] args) {
int c = this.a;
}
}
我是java新手。爲什麼我不能在主要方法中使用「this」?爲什麼不能在主要方法中使用「this」?
this
指向當前對象。然而,main
方法是靜態的,這意味着它附加到類,而不是對象實例,因此main()
內沒有當前對象。
爲了使用this
,你需要創建類(實際上,在這個例子中,你不使用this
,因爲你有一個獨立的對象引用。但是你可以用this
您m()
方法中,對於一個實例例如,由於m()
是生活在一個對象的上下文的實例方法):
public static void main(String[] args){
example e = new example();
int c=e.a;
}
順便說一句:你應該熟悉Java命名約定 - 類名稱通常以大寫字母開頭。
必須創建實例的實例
example e = new example()
e.m()
Becasue主要是static
。要訪問a
,您應該聲明它爲static
。沒有任何類的實例存在靜態變量。只有存在實例時才存在非靜態變量,並且每個實例都有自己的屬性,名稱爲a
。
public class Example {
int a = 0;
// This is a non-static method, so it is attached with an instance
// of class Example and allows use of "this".
public void m() {
int b = this.a;
}
// This is a static method, so it is attached with the class - Example
// (not instance) and so it does not allow use of "this".
public static void main(String[] args) {
int c = this.a; // Cannot use "this" in a static context.
}
}
除了來自安德烈亞斯
評論如果你想用 'A'。然後你將不得不實例化新的例子[最好使例子類名稱爲大寫Eaxmple]。
喜歡的東西
public static void main(String[] args) {
Example e = new Example();
int c = e.a;
}
HTH
的main
方法是靜態的,這意味着它可以在沒有實例化example
類被調用(靜態方法也可以作爲類方法進行說明)。這意味着在main
的上下文中,變量a
可能不存在(因爲example
不是實例化對象)。同樣的,你不能從main
沒有第一實例example
調用m
:
public class example {
int a=0;
public void m(){
// Do stuff
}
public static void main(String[] args){
example x = new example();
x.m(); // This works
m(); // This doesn't work
}
}
附加Andreas Fester答案:
/****GRAMMER:
*
* Why cannot use "this" in the main method?
*
* -----------------------------------------------------------------------------------
*
* "this" refers to the current object. However, the main method is static,
* which means that it is attached to the class, not to an object instance.
*
* Which means that the static method can run without instantiate an object,
* Hence, there is no current "this" object inside of main().
*
*
*/
public class Test{
int a ;
public static void main(String[] args) {
int c = this.a; // Cannot use "this" in a static context,
// because there isn't a "this".
}
}
主要是靜態的方法,但變量'了'是非靜態 – vels4j
爲什麼在沒有downvote要提到爲什麼?這是一個很好的問題。 – Maroun