import com.jungleboy.Employee;
//为什么不能import com.jungleboy.*;
import java.util.*;
class Test
{
public static void main(String[] args)
{
Employee e = new Employee();
e.out();
Random r = new Random();
System.out.println(r.nextInt(123));
}
}
package com.jungleboy;
public class Employee{
public void out(){
System.out.println("I am in Employee!");
}
}我把Employee.java放在根目录的com文件夹的jungleboy文件夹下import com.jungleboy.Employee;我这样写可以运行不会出错。
为什么不能像import java.util.*那样写成
import com.jungleboy.*;问题很基础 希望高手和不是高手的都说下。
只要编译的时候这样写
javac -classpath c:\jdk\bin MyPackage.java
这样编译就能通过了。 lz试试
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:\java 3、源文件:
F:\java\Vector.java
F:\java\List.java F:\java\LibTest.java 4、文件内容
-------------------------
//: 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.class 7、执行
F:\java> java c03.LibTest 8、输出结果
com.bruceeckel.util.Vector
com.bruceeckel.util.List 9、注意
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 errors b、出错的原因在于编译器的原理:根据 "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、根包客户类的源代码和服务类的源代码在不同的目录中;
或者使用完整import语句(不使用import pacage.×;而使用import pacage.classname;)
c、有包客户类的源代码和服务类的源代码可以在同一目录中;
学到了蛮多东西的嘛。
为什么不能?只是IDE自动帮你修改的吧? 因为你的package里面只有一个类?你不用IDE 直接javac java试试
import com.jungleboy.Employee;public class Employee{
public void out(){
System.out.println("I am in Employee!");
}
}
他说这么多 只有上面这句最有用,原来是我的classpath没有设置
我在我的环境变量中加入这句就可以啦!
CLASSPATH=.; F:\java;F:\j2sdk1.4.0_02\lib;
谢谢你们的帮助。
根本就运行不成功F:\java> javac Vector.java -d//成功
F:\java> javac List.java -d//成功
F:\java> javac LibTest.java -d//失败EditPlus下运行结果:---------- JAVAC ----------
Test.java:1: 软件包 com.jungleboy 不存在
import com.jungleboy.*;
^
Test.java:8: 找不到符号
符号: 类 Employee
位置: 类 Test
Employee e = new Employee();
^
输出完毕 (耗时 1 秒) - 正常终止
JDK1.4以上已经不需要设置这个环境变量了