2013-10-14 58 views
1
public class Document1 { 
    public static void main(String[] args) { 
    String i = "A"; 
    eg(); 
    } 

    public static void eg(){ 
     System.out.println(" " + i); 
    } 
} 

我不明白爲什麼這不起作用。在java中訪問其他方法變量?

+2

爲什麼會期望它的工作? –

+0

變量i不適用於eg()方法,因爲它不在範圍內。你應該多讀一點關於變量,方法和範圍的內容。 – Alex

+13

如果你的車裏有一瓶威士忌,你可以在房間裏喝嗎?不。..除非你有一個'getter'從車裏帶給你:D – Maroun

回答

4

scope

您在下面的方法獲得一個編譯器錯誤。

public static void eg(){ 
     System.out.println(" " + i); 
    } 

因爲i是主方法的局部變量。您無法使用其他方法訪問。

你可以做的是,將該變量傳遞到你想要的地方。

public static void main(String[] args) { 
    String i = "A"; 
    eg(i); 
    } 

    public static void eg(String param){ 
     System.out.println(" " + param); 
    } 
+0

謝謝你,對不起,這是一個非常簡單的問題,我是新來的java ...和編程一般... – abarnybox

1

你應該通過i作爲參數傳遞給方法eg().

在你的代碼,i是在main方法的局部變量。因此,您的eg()方法無法訪問它。

嘗試:

public static void main(String[] args) { 
    String i = "A"; 
    eg(i); 
    } 
0

由於eg()方法是不知道可變i的。它僅在main()方法的範圍內。您需要將它傳遞給eg()方法或將其設置爲實例變量(在本例中爲靜態變量)。

public static void main(String[] args) { 
    String i = "A"; 
    eg(i); 
} 

public static void eg(String i){ 
    System.out.println(" " + i); 
} 
0

,因爲它是在main的範圍內聲明的你不能從你的函數eg()訪問String i。您可以通過在主要功能上方放置String i來在全球範圍內聲明i。或者把它作爲參數,以你的功能,如:

public static void eg(String i){ 

和函數調用更改爲:

eg(i); 
0

它的範圍的問題。你的函數eg()不能「看到」變量i,因爲它不在其視圖中。但是,如果你做了如下:

public class Document1 { 
    String i = "A"; 

    public static void main(String[] args) { 

     eg(); 
    } 

    public static void eg(){ 
     System.out.println(" " + i); 
    } 
} 

然後,它會工作,因爲現在的變量的作用域是整個類文件,而不是僅僅的主要方法。

2

因爲i只存在於主範圍內。你必須通過i裏面的eg函數,像這樣eg(String param)

1

這就是所謂的問題scopescope是變量可見的代碼區域。例如:

for(int x = 0; x < 10; x++) 
{ 
    // x can only be used inside this loop. 
} 

另一個例子是,如果你聲明一個局部變量的方法中:

private void doSomething() 
{ 
    String value = "this can only be used inside doSomething()"; 
} 

Here是一個非常有益的鏈接解釋的概念。

對於你的問題,你只需在方法中聲明一個變量。你應該讓一個參數化方法:

public void eg(String i) 
{ 
    // Your code as normal. 
} 
0

這一切都做變量範圍 - 「範圍」的意思,其中的變量是可訪問的。

在你的代碼中,i是一個「局部變量」,它只在聲明它的方法範圍內(實際上只聲明後聲明爲)。這就是爲什麼其他方法不能「看到」它。

方法的參數也被認爲是局部變量。

下一級是實例變量,其作用域是所有方法,但只在實例的上下文中 - 每個實例都有自己的副本。

之後,你有靜態變量,其範圍是每個實例 - 每個類只有一個副本定義它。


「修理」你的代碼,你可以:

  • 傳遞變量作爲參數傳遞給eg()方法
  • 創建static變量,這方法之外聲明(S)
  • 因爲你的方法是靜態的,一個實例變量不會有幫助,但是如果你使你的方法實例方法(非靜態)並創建了你的類的一個實例,它就會工作