日期:2014-05-18  浏览次数:20603 次

java基础,却难倒了好多大牛
public class A {
    B b = new B();
}

public class B {
    A a = new A();
}

类之间循环引用问题,单独使用javac A 不能通过编译,会报“找不到类符号B”的错误。但使用javac *.java却可以编译通过,有谁知道原理
本人学了两年java。。。想不通。。。惭愧ing

------解决方案--------------------
...这没什么原理可说 你B.class不存在 他上哪去找 打包一起编译才能过
你一样可以用javac A.java B.java

------解决方案--------------------
打包和引用的问题吧

a需要引用b
b也需要引用a
但是你得在a引用b的时候告诉b在哪里吧
同时也得告诉系统b引用a的时候a在哪里啊

如果没有提前打包
b的定义在a后面
系统都还没有跑到哪里去编译
当然就不存在b
自然就找不到b咯
------解决方案--------------------
编译类都不在一起,无法识别,所以通不过。。。
------解决方案--------------------
A引用了B,然后你单独编译A,肯定就找不到B啦。
------解决方案--------------------
问下,这个东西如果运行的话会产生什么效果???一直循环下去?直至资源枯竭?
------解决方案--------------------
javac -verbose *.java
------解决方案--------------------
你想问的应该是:为啥同时编译就可以编译通过,而单独编译却不能编译通过。
即使是同时编译,总得有个先后,那从微观来说,也是单个编译,为啥就不会出问题了呢
------解决方案--------------------
不能通过编译,只是编译器做了特殊的限制。。 
一看就知道有问题的代码。。 即时通过编译,实例化任何一个都会内存溢出。。  
感觉楼主这个问题问的没什么意义。。
------解决方案--------------------
哟洗。。同时编译才行。。。
------解决方案--------------------
#19楼是正解,楼主不要被大家侃晕了
你只是打错了 少打了个.java
我刚才亲自试了一下 javac A.java是可以的 但是他会把B.class也编译出来
看了下
好多人只是研究 从理论上探讨 运用自己并不熟悉的知识试图去解决问题 这简直太符合应试教育下的学生了
对待问题就像考试一样 会不会的不管 不分析问题 而是把自己会的全部写出来

其实自己去试一下就知道怎么回事了
哎 悲哀啊