当前位置: 代码迷 >> Java相关 >> 初级问题,大家见笑,关于两个不同包的类相互访问的问题。
  详细解决方案

初级问题,大家见笑,关于两个不同包的类相互访问的问题。

热度:244   发布时间:2006-01-10 22:20:00.0
初级问题,大家见笑,关于两个不同包的类相互访问的问题。

1。我先在E:\JAVA\ 目录下新建了一个文件夹p1,然后我将三个.java文件保存在此文件夹里,我通过命令行方式编译并且通过了。接着,我又在E:\JAVA\ 下新建了文件夹p2,然后将二个.java文件放到此文件夹里,这两个.java文件都调用了p1中的类,我仍然在命令行下编译,但是出现编译错误,提示找不到p1,我将P1复制到p2里,再次编译运行,这次通过了,我想知道这是怎么回事?


2。还有就是在命令行方式下编译的时候,为什么必须把同一包中的所有.java文件一次性通过javac编译,而不能一个一个的分别编译呢?

谢谢!!

搜索更多相关的解决方案: 见笑  初级  访问  

----------------解决方案--------------------------------------------------------
我不告诉你我在哪里,你找不找得到我??
你不告诉类A 类B的位置,又怎么引用类B呢?
看看关于封装的部分就了解了。
----------------解决方案--------------------------------------------------------
以下是引用cll19820814在2006-1-11 10:24:00的发言:
我不告诉你我在哪里,你找不找得到我??
你不告诉类A 类B的位置,又怎么引用类B呢?
看看关于封装的部分就了解了。
请问要怎么把包p1的位置告诉包p2?




p1中的三个.java文件我都在开头加了package p1;p2中的两个.java文件我加了package p2;我没用import,我在p2中的.java文件调用p1中的类的语句处用的全名,也就是包名(p1)+类名;
我的classpath:.;C:\j2sdk1.4.2_10\lib
我在命令行方式是这样键入的:
先编译p1中的.java文件:
E:\JAVA\p1>javac SamePackage.java Protection.java Derived.java Demo.java(编译通过)
然后:
E:\JAVA\p1>cd..
E:\JAVA>java p1.Demo(显示出正确结果)

再编译p2中的.java文件:
E:\JAVA\p2>javac Demo.java OtherPackage.java Protection2.java(编译通不过)
错误信息:
Protection2.java:2: package p1 does not exist
class Protection2 extends p1.Protection
^
OtherPackage.java:6: package p1 does not exist
p1.Protection p=new p1.Protection();
^
OtherPackage.java:6: package p1 does not exist
p1.Protection p=new p1.Protection();
^
Protection2.java:9: cannot resolve symbol
symbol : variable n_pro
location: class p2.Protection2
System.out.println("n_pro="+n_pro);
^
Protection2.java:10: cannot resolve symbol
symbol : variable n_pub
location: class p2.Protection2
System.out.println("n_pub="+n_pub);
^
5 errors

接着我将包p1整个复制到包p2中再次编译:
E:\JAVA\p2>javac Demo.java OtherPackage.java Protection2.java(这次编译通过了)
E:\JAVA\p2>cd..
E:\JAVA>java p2.Demo(得到正确结果)

这到底是什么原因呢?

----------------解决方案--------------------------------------------------------
我个人建议还是要用import语句吧?还有classpath里加入了那个p1, p2 包没有?
----------------解决方案--------------------------------------------------------
我个人建议还是要用import语句吧?
-------但是用全名跟用import的作用是一样的

还有classpath里加入了那个p1, p2 包没有?
---------要
为什么要加入那个p1, p2 包?
我的classpath:.;C:\j2sdk1.4.2_10\lib
----------------解决方案--------------------------------------------------------

classpath 俺从字面上 理解即类路径,即由这个找到类,JAVA的基本工具包如是,自己写的类亦如是。


----------------解决方案--------------------------------------------------------
那我的classpath有问题吗?
----------------解决方案--------------------------------------------------------
你设置的东西一点错误也没有,
在dos下javac只能看见在所在目录的包,
例如:c:\test\test2\test3\test6\Test.java
c:\test\test2\test4\test7\Test.java
c:\test\test2\test5\test8\Test.java
你进入到test2目录即C:\test\test2
那么它将不识别包test
只识别test3,test4和test5,也不识别test6,test7,test8
向你所说的那总情况下,你可以通过下面的方法编译:
进入到目录E:\JAVA下
然后使用-classpath指定路径编译就可以了即:
E:\JAVA\javac E:\JAVA\P2 文件名就可以了
----------------解决方案--------------------------------------------------------
呵呵,豁然开朗,谢谢了!
----------------解决方案--------------------------------------------------------
  相关解决方案