2012-12-04 56 views
2
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」?

+3

主要是靜態的方法,但變量'了'是非靜態 – vels4j

+3

爲什麼在沒有downvote要提到爲什麼?這是一個很好的問題。 – Maroun

回答

12

this指向當前對象。然而,main方法是靜態的,這意味着它附加到類,而不是對象實例,因此main()內沒有當前對象。

爲了使用this,你需要創建類(實際上,在這個例子中,你不使用this,因爲你有一個獨立的對象引用。但是你可以用thism()方法中,對於一個實例例如,由於m()是生活在一個對象的上下文的實例方法):

public static void main(String[] args){ 
    example e = new example(); 
    int c=e.a; 
} 

順便說一句:你應該熟悉Java命名約定 - 類名稱通常以大寫字母開頭。

2

必須創建實例的實例

example e = new example() 
e.m() 
1

Becasue主要是static。要訪問a,您應該聲明它爲static。沒有任何類的實例存在靜態變量。只有存在實例時才存在非靜態變量,並且每個實例都有自己的屬性,名稱爲a

1
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. 
    } 
} 
0

除了來自安德烈亞斯

評論如果你想用 'A'。然後你將不得不實例化新的例子[最好使例子類名稱爲大寫Eaxmple]。

喜歡的東西

public static void main(String[] args) { 
    Example e = new Example(); 
    int c = e.a; 
} 

HTH

0

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 
    } 
} 
0

附加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". 
    } 
} 
相關問題