2010-09-20 112 views
1
public class test 
{ 
    private static int a; 
    public static void main(string[] args) 
    { 
     modify(a); 
     system.out.print(a); 
    } 
    public static void modify(int a) 
    { 
     a++; 
    } 
} 

我想知道如何直接在main()方法中訪問私有靜態變量。 雖然靜態變量可以直接從靜態方法訪問,但變量是私有的,方法是main()..請解釋如何在main()中訪問私有靜態實例變量

+1

@NullUserException:字段被隱式初始化(​​在數字基元的情況下爲0) – 2010-09-20 15:15:54

+1

這可以工作,但所有的大寫似乎都從代碼中消失了。字符串應該是String,測試應該是Test。原語'a'被初始化爲默認值0. – rdvdijk 2010-09-20 15:16:01

+0

如果沒有指定其他值,則字段將使用其默認值進行初始化,因此這不成問題。無論如何,'modify()'方法增加了方法的局部變量而不是字段,所以調用它似乎很沒用。它不會返回任何內容,也不會修改方法範圍之外的任何值。 Java沒有通過引用調用。 – Reboot 2010-09-20 15:18:01

回答

6

是的,它是靜態的,但由於它位於與main方法相同的類中,它可以可以通過類中的靜態方法(包括main)來訪問...並且實際上也可以通過同一類中的常規方法來訪問

+0

只是*不*將它作爲參數傳遞(請參閱@Colin Hebert的評論) – luiscolorado 2010-09-20 15:25:53

1

由於main在同一個類中,因此可以訪問私有變量。

1

私有成員變量對於該類的任何方法(靜態或非靜態)都是可見的。靜態方法可以執行的操作有一些限制,但與可見性規則分開。

+0

+1區分靜態/實例和可見性 - 即使變量是實例變量,「main」也能夠訪問它作爲'instanceVar.a' – 2010-09-20 15:12:58

2

如果將成員變量聲明爲私有,這意味着它只能從同一類中的方法訪問。您的main()方法實際上是同一個類中的靜態方法,因此它可以訪問任何私有變量。

3

它不會打擾你,modif()可以訪問屬性a?然後它與main()完全一樣。

關於main()的唯一特別之處在於此方法用作應用程序的入口點。這種特殊性不會干擾main()是靜態的事實。


順便說一句,你modif()方法不會真的是因爲它是由參數a陰影訪問靜態a領域。

另一件事,a++不會做任何事情,因爲你只是修改方法內參數a的值; int是一個原始類型,並且通過值傳遞,因此您的代碼不會更改方法範圍之外的a的值。

我想你想是這樣的:

public class test{ 
    private static int a; 
    public static void main(string[] args){ 
     modify(); //<--- No parameters needed here ! 
     system.out.print(a); 
    } 

    public static void modify(){ //<--- No parameters needed here ! 
     a++; 
    } 
} 
0

但 公共類測試 { 私人詮釋一個; public static void main(string [] args) system.out.print(a); }

}

您不能訪問實例變量「A」,直接在main()......它會顯示錯誤bcoz是私有......但它是如何訪問私有靜態...