首頁  >  問答  >  主體

java - 为什么此私有静态变量能被访问呢?

class Test{
    private static int i = 1;
    
    public static void main(String[] args){
        Test test = new Test();
        System.out.println(test.i);  //此处为何能访问到私有的i变量呢?
    }
}

如果与Test类不同包,调用i变量却报错,为何?

高洛峰高洛峰2744 天前1368

全部回覆(11)我來回復

  • 天蓬老师

    天蓬老师2017-04-18 10:49:37

    因為main函數也是Test類別的靜態函數

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:49:37

    給你這個圖片吧。你可以看看,尤其要注意protected與缺省之間的差異。

    回覆
    0
  • 黄舟

    黄舟2017-04-18 10:49:37

    private關鍵字的意思是除了包含這個成員的類別之外,其他類別都沒辦法存取這個成員,包括同處於這個包內的其他類別。所以不僅是不同包,相同的包也無法存取。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 10:49:37

    如果這樣都不行,private修飾的變數還有什麼用?

    回覆
    0
  • 阿神

    阿神2017-04-18 10:49:37

    當前類為何不行?

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:49:37

    如果不行的話,那i在哪裡用的,豈不是白白聲明一個i啊。
    還有private是其他類別呼叫Test類別的 i 是不能呼叫的,本類別不受限制的。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-18 10:49:37

    顯然你要重新學習:public private static protected 這四個在物件導向程式設計的常用修飾符

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:49:37

    由於i是static,所以test.i(實例.靜態變數)等價於Test.i(類別.靜態變數),i又是private,所以只能在Test類別內被存取。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:49:37

    這個是一個程式設計的基礎問題。希望再去看定義和範圍。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:49:37

    因為private修飾的變數可以在本類中被訪問,這是關於訪問修飾符的問題。

    回覆
    0
  • 取消回覆