当前位置: 技术问答>java相关
处学Java请教关于package的问题
来源: 互联网 发布时间:2017-04-07
本文导语: CLASSPATH和PATH都已经设定有了F:javaprogram; 所有源码文件均在此目录下 想要实践一下关于包的知识,在testPack.java中写下 package com.testpack.util; public class testPack{ . . public static int test(int i, int j) { return i+j; } ...
CLASSPATH和PATH都已经设定有了F:javaprogram; 所有源码文件均在此目录下
想要实践一下关于包的知识,在testPack.java中写下
package com.testpack.util;
public class testPack{
.
.
public static int test(int i, int j)
{
return i+j;
}
}
在F:javaprogram>下使用java -d . testPack.java编译通过,并且成功的创建了子目录而且.class文件正确产生
在另一个fortest.java中引用import com.testpack.util.*;
在class fortest的main函数中如下调用
testPack.test(1, 3)
出现错误如下:
不能解析符号:方法test(int, int)
位置:类 in testPack
testPack.test(1,3);
^
1个错误
如果改成import com.testpack.util.testPack;则程序没有任何问题,而且运行正确
这是怎么回事儿呢?
想要实践一下关于包的知识,在testPack.java中写下
package com.testpack.util;
public class testPack{
.
.
public static int test(int i, int j)
{
return i+j;
}
}
在F:javaprogram>下使用java -d . testPack.java编译通过,并且成功的创建了子目录而且.class文件正确产生
在另一个fortest.java中引用import com.testpack.util.*;
在class fortest的main函数中如下调用
testPack.test(1, 3)
出现错误如下:
不能解析符号:方法test(int, int)
位置:类 in testPack
testPack.test(1,3);
^
1个错误
如果改成import com.testpack.util.testPack;则程序没有任何问题,而且运行正确
这是怎么回事儿呢?
|
该问题已经解决。呵呵。如coaa(我吃多了) 老兄所说。我尝试了一下,果真如此。不过coaa说的不太清楚而已。
1.我尝试用javac -verbose来编译fortest。发现编译过程中,他发现有import*,就会在当前目录下【注:当你在classpath中包含了当前目录的情况下】查找所有包含在com.testpack.util包中的源文件并进行编译,当发现testPack.java,并且时间戳比class新,便会尝试进行编译,当然,由于没有使用-d参数,他无法正常编译该源文件,便放弃,继续进行fortest.java的check动作,当发现fortest使用了testPack后,就报错:can not resolve symbol。呵呵。
2.注意,当你在fortest.java中使用import具体包名时,他的动作顺序就不一样了。
他首先查找classpath下是否有符合该包名的路径,如果找到,就进去看是不是有testPack.class,如果没有,再找源文件进行编译,当然,我们的情况是肯定可以找到testPack.class的,呵呵。因为已经编译好了的么。当这一步完成后,再进行fortest.java的check动作,从而顺利通过编译。
所以,楼主可以尝试把这两个源文件(testPack.java、fortest.java)放在不同的目录中,就肯定可以通过编译。
不知道我表述的清楚不?如果不清楚,可以和我联系(deniswang@sina.com)。呵呵。希望和大家多多交流,共同进步。
感谢coaa(我吃多了)提出的宝贵思路。
我已经试过了,没问题。
ps:jdk真的很白痴。
1.我尝试用javac -verbose来编译fortest。发现编译过程中,他发现有import*,就会在当前目录下【注:当你在classpath中包含了当前目录的情况下】查找所有包含在com.testpack.util包中的源文件并进行编译,当发现testPack.java,并且时间戳比class新,便会尝试进行编译,当然,由于没有使用-d参数,他无法正常编译该源文件,便放弃,继续进行fortest.java的check动作,当发现fortest使用了testPack后,就报错:can not resolve symbol。呵呵。
2.注意,当你在fortest.java中使用import具体包名时,他的动作顺序就不一样了。
他首先查找classpath下是否有符合该包名的路径,如果找到,就进去看是不是有testPack.class,如果没有,再找源文件进行编译,当然,我们的情况是肯定可以找到testPack.class的,呵呵。因为已经编译好了的么。当这一步完成后,再进行fortest.java的check动作,从而顺利通过编译。
所以,楼主可以尝试把这两个源文件(testPack.java、fortest.java)放在不同的目录中,就肯定可以通过编译。
不知道我表述的清楚不?如果不清楚,可以和我联系(deniswang@sina.com)。呵呵。希望和大家多多交流,共同进步。
感谢coaa(我吃多了)提出的宝贵思路。
我已经试过了,没问题。
ps:jdk真的很白痴。
|
package的机制是优先找当前目录下的文件,再去找comjswleeutil的.