class  Test1
{
private int i=8;
public static void main(String[] args) 
{
Test1 a=new Test1();

System.out.println(a.i);
}
}
对于一个类的私有变量,只能在类内部使用,并且对于实例属性不可以在static上下文中引用。
为什么这个例题没有问题,而把main方法写到另一个类里就不可以,我想知道这其中的原因,理由。

解决方案 »

  1.   

    public static void main被认为是Test1的公有方法,所以在它自己的方法里面是可以访问到的。
      

  2.   

    1. main是属于Test1的,所以i对main不会隐藏,是可见的。
    2. “实例属性不可以在static上下文中引用”这个说法不准确,应该是“不能直接引用”,但可以通过创建当前类的实例来引用。这里的a是Test1的一个实例,通过a来引用i,没有问题。
      

  3.   

    楼上说的没错。楼主的这段代码语法上没有问题,但不推荐这样做。本来一个成员变量设为private就是为了安全,不让类外面的代码访问,如果想访问的话,一般会定义一个public的set方法返回这个值。此例中虽然main方法可以访问到i,但也正如楼主所言,只能在这个类里面访问;由于main只是一个程序的入口,假如main函数在其他类里面,原来的代码就有问题了。
      

  4.   

    1. main是属于Test1的,所以i对main不会隐藏,是可见的。
    2. “实例属性不可以在static上下文中引用”这个说法不准确,应该是“不能直接引用”,但可以通过创建当前类的实例来引用。这里的a是Test1的一个实例,通过a来引用i,没有问题。回答的不错
      

  5.   

    (对于一个类的私有变量,只能在类内部使用,)这点是没错的,(并且对于实例属性不可以在static上下文中引用。)这点我就不太认同了,main方法也是一种方法啊,它当然可以调用本类中的私有属性了,如果它都不能调用了,那可麻烦了!
    (为什么这个例题没有问题,而把main方法写到另一个类里就不可以,)当然不行啊,私有属性只有本类中可以调用,如果其他类的main方法可以调用别的类的私用属性,那java的安全性,封装性就没了。
      

  6.   

    对于Test1里的所有方法.i是可见的.
      

  7.   

    1.main方法也只是一个方法,除了可以作为默认的程序入口之外,与其他方法并没有区别。
    它放在哪个类中,就属于那个类的一部分。因此也和该类的其他方法一样,可以访问该类的私有变量。所以你把一个方法(这里就是main方法)拿到类的外面,他当然就访问不到私有变量了。2.实例属性不可以在static上下文中引用。
    static部分是在类的初始化期间(介于加载和实例化之间)执行。(前几天有一个贴子讨论过)
    。也就是说有main方法的时候,实例变量还没有出生呢~那让这个方法到哪里去找这个变量呢?
      

  8.   

    > 对于一个类的私有变量,只能在类内部使用,
    > 并且对于实例属性不可以在static上下文中引用。
    > 为什么这个例题没有问题
    > 而把main方法写到另一个类里就不可以,我想知道这其中的原因,理由。首先,楼主这个例子,并没有违背“对于一个类的私有变量,只能在类内部使用”,因为它就是在自己这个类内部的代码里来访问的。其次,也没有违背“对于实例属性不可以在static上下文中引用”,因为,对 i 的访问是通过一个实例对象 a 进行的,虽然语句是写在一个 static 方法内部,但这并不是“static上下文”。最后,如果把这段代码写到另一个类里,显然就违背了第一条。
      

  9.   

    其实main方法是一个程序的切入点,一个程序运行首先寻找有没有main方法,所以他是static的,这是固定的。对于楼主的这个例子来说不涉及真正意义上的static,私有的属性只有类内部能访问,所以如果蒋main放入到另一个类中就不能访问私有的属性了