我有两个类,T2放于当前目录下的study中;Hello放于当前目录
这样编译 Hello通不过,但可以T2可以
---> Hello肯定编译通不过,因为T2的构造方法不是public的,而Hello类和T2类不在同一个包中,故不能访问T2的构造方法。但是先剪切T2的部分,然后编译就可以通过,运行也正常
--> 这时T2会有个默认的public构造方法,所以编译能通过。然后再还原T2,单独编译T2
运行java Hello.这样就可以调用构造函数了;输出T2 be constructed
--> 此时你没有再编译Hello.java,那么还是执行上次编译的Hello.class,它在执行到new T2()的时候,自然去找T2.class,而此时T2.class是你剪切回来后正确编译的,因此会输出T2 be constructed

解决方案 »

  1.   

    不加 public 就是 "frindly" ,即包内访问权限class Hello 在 study 的外面 所以访问不到。
      

  2.   

    ok, ic
    我试过,但是为什么在T2(){} 前面加个public 就是public的构造方法---------加个public void 就是T2 内的一个T2()函数?????
      

  3.   

    java语言就是这样规定的,构造方法没有返回值,方法名和类名相同。
      

  4.   

    我剪切回来以后,T2() 仍然是不加限定词,就是默认的friendly,编译的可是Hello仍然继续找到了T2的friendly T()的函数,并执行
    编译器是不能找到friendly T()的,而它生成的代码却能??!!!!!????
      

  5.   

    To: yuanmeng163(今天我有空)
    ----------------------------------------
    然后再还原T2,单独编译T2
    运行java Hello.这样就可以调用构造函数了;输出T2 be constructed
    --> 此时你没有再编译Hello.java,那么还是执行上次编译的Hello.class,它在执行到new T2()的时候,自然去找T2.class,而此时T2.class是你剪切回来后正确编译的,因此会输出T2 be constructed
    ----------------------------------------
    请问为什么 ?  T2被还原了,在new T2()的时候为什么还能访问他的构造方法? 另外我试过了,即使把构造方法换成private也可以用,为什么 如果那样的话,单例模式不是可以被非法或取对象了吗
      

  6.   

    哦,天,这private都能,那么这不是可以非法存取了么???继续up!!!!!!!!!!1
      

  7.   

    public、private、protected、friendly这些关键字只是在编译时起作用。
    OK?
      

  8.   

    可以说是JAVA的一个BUG!也就是说, JAVA 不会进行动态安全性检查!
    例如,你先将一个类定义公有的,在其他类中使用!然后再将该类定义成私有的,重新编译该类!
    注意,只编译该类,再运行其他类的话,OK!
    看看 TIJ 2啊,里面有说的!
      

  9.   

    “为什么在T2(){} 前面加个public 就是public的构造方法---------加个public void 就是T2 内的一个T2()函数?????”
    构造函数不能加返回值,不等于返回 void 。