具体代码如下: public class CallingConstructorFromConstructor {
    //已经声明了是private;
    private int i = 0;
    
    //已经声明了是private;
    private String show = null;
    
    public CallingConstructorFromConstructor(){
        this(10 , "I love this game!");
    }
    
    public CallingConstructorFromConstructor(int i , String show){
        this.i = i;
        this.show = show;
        Print();
    }
    
    //已经声明了是private;
    private void Print(){
        System.out.println("i = " + i + " show = " + show);
    }
    
    public static void main(String[] args) {
        CallingConstructorFromConstructor cc = new CallingConstructorFromConstructor();
        //???这里居然可以直接访问并修改;
        cc.i = 20;
        cc.show = "I hate this game!";
        cc.Print();
    }
}在JBuilder2005中显示的结果是:
   i = 10 show = I love this game!
   i = 20 show = I hate this game!
不是private ,外部是部可见的吗?
这里是怎么回事,请高手赐教!谢谢!

解决方案 »

  1.   

    呵呵,你这个main就是CallingConstructorFromConstructor类的main,不是别的类的main啊。
    别的类的main当然不能访问CallingConstructorFromConstructor的i。
      

  2.   

    因为main函数是CallingConstructorFromConstructor的一方法。
      

  3.   

    哦,我是刚刚开始学习Java的。我原来学习C#的时候,好像main是可以放在任何一个类中的。在Java中main在哪个类中就是哪个类的成员吗?
      

  4.   

    Private 表示该成员在类定义的范围以外不可访问,即使派生类也不能访问
      

  5.   

    老大,private定义的范围就是在你声明的class内部,是其他的类无法使用而已,如果是public 的话其他类是可以调用的!
      

  6.   

    在Java中main在哪个类中就是哪个类的成员吗?
      

  7.   

    main 是CallingConstructorFromConstructor 的成员函数,当然可以访问
      

  8.   

    楼主理解不对,即使在C#中,main同样也是隶属于某个类,因此可以访问哪个类的私有成员。区别在于C#中不可以同一个工程中有两个类都有main,因为.net平台上的语言生成的是exe或dll,只能有一个入口,而Java中,没有明确的“程序的入口”这一说法,任何一个类,只要它有一个main函数,那么这个类文件(class文件)都可以交给java命令作为可加载模块来启动运行,而并非所有的类链接起来生成一个exe,然后固定一个入口。用惯了你会觉得Java这种方式至少使得简单的单元测试易如反掌。