以我的理解:包应该是java类文件的一种组织方式,就像文件的目录路径一样。不同的包可以有相同名字的类,但可以在前面加上包名区分它们。许多公司自己开发的类文件一般放在以自己公司的ip地址为名称的包下,以保证类能被唯一正确的调用,如com.ibm.xxx.xxx包。其实说穿了,包就是一个名字前缀而已。
你的问题是可能你的类路径设置不正确,应该加上一个“.”,如:"classpath=.;c:\jdk\;...",那么编译器在找类的时候就会在本目录下寻找,这样才能找到你说的Demo1类。
你的问题是可能你的类路径设置不正确,应该加上一个“.”,如:"classpath=.;c:\jdk\;...",那么编译器在找类的时候就会在本目录下寻找,这样才能找到你说的Demo1类。
PACKAGE不是说要把Demo1.java和 Demo2.java都放在p1文件夹里PACKAGE指的是在编译后的。CLASS文件所放的地方,运行时它会到你的CLASSPATH或你写的PACKAGE中去找你的DEMO1。CLASS。所你你把编译后的。CLASS放到一起没问题
我的CLASSPATH 是:.;d:\jdk14\lib\dt.jar;d:\jdk14\lib\tools.jar
PATH : .;D:\jdk14\bin
我还想问:Demo1.java ,Demo2.java是保存在PI文件夹里,还是保存到其他地方也行?
就可以放在不同的目录中,避免了同名的问题!
所以你可以把包想象一个目录,
用的例子说明,比如你编译demo1.java时,会在当前目录生成一个子目录
p1,在该目录中有demo1.class文件,所以当你在和demo1.java相同的目录下
编译demo2.java,由于你用到了demo1.class,所以你必须引用这个包,
即import p1.*;
public class Demo1
{
public int a;
public void method()
{
System.out.println("demo1");
}
}我认为问题出在类的声明前没有加public修饰符,所以这个类不能被另一个包里的类引用。
这样编译:
假设两个文件都在d:\
D;\javac -d . Demo1.java
D:\javac -d . Demo2.java这样运行:
d:\java pl.Demo1
d:\java pl.Demo2
我也是初学者,开始我没有注意你用的是同一个包,所以建议你用public。后来就一直试着解决这个问题:)。
我解决的办法是把main函数的类放到无名包里,然后调用p1包里的函数,这时p1包里被调用的类必须用public修饰。
你说的用classpath能解决,我也简单试了一下,不行,希望你能指点一下,谢谢了。
开始我没有注意到你用了一个包,所以建议你用public。后来我就试着解决这个问题,发现把main函数放到无名包里,在main中调用p1包里的类就可以正常运行,当然这种情况下p1包里被调用的类的访问权限只能是public。
你说的用classpath就能解决,我试过却不行。能不能指点一下?先谢谢了。