你是放在jlj\mypackage目录下吗?
解决方案 »
- 关于Thread的子类创建线程的一道程序,里面有部分看不懂,请大家可以指点指点
- Java的学习路线
- 用sql 和vb开发程序出现"错误3704,对象关闭时对象不允许操作"
- rcp程序中能用swing来画图吗?
- java中有没有类似C#中列举文件(Directory.GetFiles())的方法
- 请问,怎样将整型转换为字符串?(初学者)
- 一条java基础面试题,求教高手
- 一道SCJP题目
- jdk1.4中如何响应鼠标中间滚轮滚动消息(100分)?
- 哪位高手帮我看一下下面代码,万分感谢!
- 为什么我刚装完JBuild8,我的Tomcat4就不好用了?
- 请问:Java中如何将web页面上的信息发到个人的手机上?能否给点提示?
对于一个包下的类是不需要import 的, 对于不同包下的类必须能够在CLASSPATH中找到,包括当前目录下的类(.)。
对于一个包下的类是不需要import 的, 对于不同包下的类必须能够在CLASSPATH中找到,包括当前目录下的类(.)。
还有如果将包文件打包到其他CLASSPATH能找到的目录,也是不行的呀!主程序文件与包文件明明不是同一个包的呀!!!奇怪啊!!!
c:\jdk\bin
把你的包连同你的类一起放在这个classpath,就是你编译好的MyPackage.class和JljPackage.class放在
c:\jdk\bin\jlj\mypackage下面你的Package里写的是import jlj.mypackage.*;
只要编译的时候这样写
javac -classpath c:\jdk\bin MyPackage.java
这样编译就能通过了。呵呵,不知道是为什么,不写-classpath选项就不行,有4个错误,写了就可以了,可能这也是为什么javac也有-classpath这么一个选项的原因吧。
1、JDK的环境变量:
JAVA_HOME=F:\j2sdk1.4.0_02
Path=E:\WINNT\system32;E:\WINNT;E:\WINNT\System32\Wbem;f:\j2sdk1.4.0_02\bin;
CLASSPATH=.; F:\java;F:\j2sdk1.4.0_02\lib;
2、目录:
F:\java3、源文件:
F:\java\Vector.java
F:\java\List.javaF:\java\LibTest.java4、文件内容
-------------------------
//: List.java
// Creating a package
package com.bruceeckel.util;public class List {
public List() {
System.out.println(
"com.bruceeckel.util.List");
}
} ///:~
-------------------------
//: Vector.java
// Creating a package
package com.bruceeckel.util;public class Vector {
public Vector() {
System.out.println(
"com.bruceeckel.util.Vector");
}
} ///:~
-------------------------
//: LibTest.java
// Uses the library
package c03;
import com.bruceeckel.util.*;public class LibTest {
public static void main(String[] args) {
Vector v = new Vector();
List l = new List();
}
} ///:~
-------------------------5、使用
F:\java>javac Vector.java -d .
F:\java>javac List.java -d .
F:\java>javac LibTest.java -d .6、生成的目录及类
F:\java\com\bruceeckel\util\Vector.class
F:\java\com\bruceeckel\util\List.class
F:\java\c03\LibTest.class7、执行
F:\java>java c03.LibTest8、输出结果
com.bruceeckel.util.Vector
com.bruceeckel.util.List9、注意
A、在客户类属于某个包时,如LibTest.java属于包c03:
a、使用package要保证成功的话,源文件都有放在统一的一个目录中,该目录
可以是任意目录(因为CLASSPATH中有".;",即当前目录也是类的搜索目录),
或者特别是CLASSPATH中指定的"F:\java";
b、编译时指定生成类.class的目标目录,
即"javac Vector.java -d ."或者"javac Vector.java -d f:\java"之类;
c、执行时要使用包名.类名,即"java c03.LibTest"-----------------------------------B、在客户类不明确属于某个包时,如LibTest.java中无语句"package c03;":
a、执行情况如下:
F:\java>javac LibTest.java -verbose
[parsing started LibTest.java]
[parsing completed 120ms]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/Object.class)]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/String.class)]
[checking LibTest]
[loading .\Vector.java]
[parsing started .\Vector.java]
[parsing completed 20ms]
LibTest.java:8: cannot resolve symbol
symbol : constructor Vector ()
location: class Vector
Vector v = new Vector();
^
[loading .\List.java]
[parsing started .\List.java]
[parsing completed 0ms]
LibTest.java:9: cannot resolve symbol
symbol : constructor List ()
location: class List
List l = new List();
^
[checking com.bruceeckel.util.Vector]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/System.class)]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/io/PrintStream.class)]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/io/FilterOutputStream.class)]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/io/OutputStream.class)]
[checking com.bruceeckel.util.List]
[total 621ms]
2 errorsb、出错的原因在于编译器的原理:根据"CLASSPATH=.;f:\java;f:\j2sdk1.4.0_02\lib;"
查找当前目录、f:\java、f:\j2sdk1.4.0_02\lib等目录,来寻找所要类,但如果也找了
源文件.java,则编译之。
故由于LibTest.java没有明确属于某个包,则默认成属于根包,故查找到了Vector.java
和List.java,则编译之,这样就出错了:系统找到了新的类
(但不属于import中所指的包com.bruceeckel.util)。虽然后面也根据
"\com\bruceeckel\util"找到了引用的类,但是前面出错了,故停止了。c、解决方法:
将"F:\java\Vector.java"、"F:\java\List.java"更改名字或移出LibTest.java
所在的目录;
或者使用完整的import语句即:
import com.bruceeckel.util.Vector;
import com.bruceeckel.util.List;d、执行结果:
F:\java>javac LibTest.java -verbose
[parsing started LibTest.java]
[parsing completed 110ms]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/Object.class)]
[loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/String.class)]
[checking LibTest]
[loading .\com\bruceeckel\util\Vector.class]
[loading .\com\bruceeckel\util\List.class]
[wrote LibTest.class]
[total 631ms]F:\java>java LibTest
com.bruceeckel.util.Vector
com.bruceeckel.util.List------------------------------------------------------------------10、原则
a、服务类在包指定的目录内;
b、根包客户类的源代码和服务类的源代码在不同的目录中;
c、有包客户类的源代码和服务类的源代码可以在同一目录中;
或者使用完整import语句(不使用import pacage.×;而使用import pacage.classname;)
a、服务类在包指定的目录内;
b、根包客户类的源代码和服务类的源代码在不同的目录中;
或者使用完整import语句(不使用import pacage.×;而使用import pacage.classname;)
c、有包客户类的源代码和服务类的源代码可以在同一目录中;