类如下:
public Test{
  
  //private variable
  private int test_variable = -1;    //construction 
  public Test(){
  }
  
  public static void main(String[] args){
  
      //new an object
      Test test = new Test();
      //try to access the private variable ( test_variable )
      System.out.println(test.test_variable);
  }
}===============================================================
source code end
===============================================================
javac Test.java ---- pass
===============================================================
java Test ----  -1
===============================================================
为什么在像main这样的static方法中就可以直接访问它所属类的private数据成员?
请高手指点!

解决方案 »

  1.   

    不好意思! 类名前边忘记加 class 了!
      

  2.   

    这个与在不在static 中没有关系记住: private 的方法和属性只能在它被定义的类中被访问因为你的static方法与private属性在同一个类里面,所以可以访问
      

  3.   

    但,我是在main中新建了一个对象阿! 我访问的是这个对象的private私有成员
      

  4.   

    但是你的main方法在Test类里面阿这与我的说法不矛盾自己体会一下
      

  5.   

    你的问题我也比较感兴趣,我先把你的代码写成一个类,然后在同一个包下,写了一个类出来用来测试public class Test1
    {    public static void main(String[] args)
        {
            Test t=new Test();
            System.out.println(t.test_variable);//这句报错了,说test_variable不可视
        }
    }按理来讲,如果test_variable是用public来修饰的,才可以t.test_variable这样用,现在原因只有一个,因为main()是在class Test里面的,这样才可以。
      

  6.   

    谢谢interpb(曾曾胡)能总原理上再讲一下它为什么要这么设计么?
      

  7.   

    面向对象的设计包括 抽象,封装,继承,多态 封装:  就是把方法和属性封装成新的数据类型(就是类),
           只向外界提供方法(接口)来访问属性,达到隐藏实现的目的
      
    通俗一点讲就是不让别人直接访问属性
         象private ,protected,public 这些访问控制修饰符 就可以达到这样的目的
      

  8.   

    interpb(曾曾胡)
    说的很好,就这么个意思的, 
    oop思想你的明白?