想把两个文件中的类放到一个包中,结果编译后没有生成包结构的目录,也无法访问同包中的其他文件中的类
源文件:
//Src.java
package same1.Src;
public class Src{
public class C{}
}//StaticImport.java
package same1.Src1;
import same1.Src1.*;//同一个包是不用import的,这里是测试一下,可以过,就是说可以找到这两层public class StaticImport{
public static void main(String[] args){
Src.C c = new Src.C();
/*
StaticImport.java:6: 软件包 Src 不存在
Src.C c = new Src.C();
^
StaticImport.java:6: 软件包 Src 不存在
Src.C c = new Src.C();
^
2 错误
*/
same1.Src1.Src.C c = new same1.Src1.Src.C();
/*
StaticImport.java:7: 软件包 same1.Src1.Src 不存在
same1.Src1.Src.C c = new same1.Src1.Src.C();
^
StaticImport.java:7: 软件包 same1.Src1.Src 不存在
same1.Src1.Src.C c = new same1.Src1.Src.C();
^
2 错误
*/
same1.Src1.Src s = new same1.Src1.Src();
/*
StaticImport.java:28: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src1
same1.Src1.Src s = new same1.Src1.Src();
^
StaticImport.java:28: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src1
same1.Src1.Src s = new same1.Src1.Src();
^
2 错误
*/
}
}编译信息:...\project\StaticImport>javac -g -verbose -Xlint:all Src.java
I:\LG_course\java_temp\project\StaticImport>javac -g -verbose -Xlint:all Src.jav
a
[解析开始时间 Src.java]
[解析已完成时间 109ms]
[源文件的搜索路径: J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[类文件的搜索路径: J:\Java\jdk1.6.0_03\jre\lib\resources.jar,J:\Java\jdk1.6.0_0
3\jre\lib\rt.jar,J:\Java\jdk1.6.0_03\jre\lib\sunrsasign.jar,J:\Java\jdk1.6.0_03\
jre\lib\jsse.jar,J:\Java\jdk1.6.0_03\jre\lib\jce.jar,J:\Java\jdk1.6.0_03\jre\lib
\charsets.jar,J:\Java\jdk1.6.0_03\jre\classes,J:\Java\jdk1.6.0_03\jre\lib\ext\su
njce_provider.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\sunmscapi.jar,J:\Java\jdk1.6.0
_03\jre\lib\ext\sunpkcs11.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\dnsns.jar,J:\Java\
jdk1.6.0_03\jre\lib\ext\localedata.jar,J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.cl
ass)]
[正在检查 same1.Src.Src]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializabl
e.class)]
[已写入 Src$C.class]
[已写入 Src.class]
[总时间 1250ms]...\project\StaticImport>javac -g -verbose -Xlint:all StaticImport.java
[解析开始时间 StaticImport.java]
[解析已完成时间 78ms]
[源文件的搜索路径: J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[类文件的搜索路径: J:\Java\jdk1.6.0_03\jre\lib\resources.jar,J:\Java\jdk1.6.0_0
3\jre\lib\rt.jar,J:\Java\jdk1.6.0_03\jre\lib\sunrsasign.jar,J:\Java\jdk1.6.0_03\
jre\lib\jsse.jar,J:\Java\jdk1.6.0_03\jre\lib\jce.jar,J:\Java\jdk1.6.0_03\jre\lib
\charsets.jar,J:\Java\jdk1.6.0_03\jre\classes,J:\Java\jdk1.6.0_03\jre\lib\ext\su
njce_provider.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\sunmscapi.jar,J:\Java\jdk1.6.0
_03\jre\lib\ext\sunpkcs11.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\dnsns.jar,J:\Java\
jdk1.6.0_03\jre\lib\ext\localedata.jar,J:\Java\jdk1.6.0_03\lib\tools.jar,.]
StaticImport.java:2: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src
import static same1.Src.Src.C;
^
StaticImport.java:2: 仅从类和接口静态导入
import static same1.Src.Src.C;
^
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.cl
ass)]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.cl
ass)]
[正在检查 same1.Src.StaticImport]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializabl
e.class)]
[总时间 1031ms]
2 错误
源文件:
//Src.java
package same1.Src;
public class Src{
public class C{}
}//StaticImport.java
package same1.Src1;
import same1.Src1.*;//同一个包是不用import的,这里是测试一下,可以过,就是说可以找到这两层public class StaticImport{
public static void main(String[] args){
Src.C c = new Src.C();
/*
StaticImport.java:6: 软件包 Src 不存在
Src.C c = new Src.C();
^
StaticImport.java:6: 软件包 Src 不存在
Src.C c = new Src.C();
^
2 错误
*/
same1.Src1.Src.C c = new same1.Src1.Src.C();
/*
StaticImport.java:7: 软件包 same1.Src1.Src 不存在
same1.Src1.Src.C c = new same1.Src1.Src.C();
^
StaticImport.java:7: 软件包 same1.Src1.Src 不存在
same1.Src1.Src.C c = new same1.Src1.Src.C();
^
2 错误
*/
same1.Src1.Src s = new same1.Src1.Src();
/*
StaticImport.java:28: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src1
same1.Src1.Src s = new same1.Src1.Src();
^
StaticImport.java:28: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src1
same1.Src1.Src s = new same1.Src1.Src();
^
2 错误
*/
}
}编译信息:...\project\StaticImport>javac -g -verbose -Xlint:all Src.java
I:\LG_course\java_temp\project\StaticImport>javac -g -verbose -Xlint:all Src.jav
a
[解析开始时间 Src.java]
[解析已完成时间 109ms]
[源文件的搜索路径: J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[类文件的搜索路径: J:\Java\jdk1.6.0_03\jre\lib\resources.jar,J:\Java\jdk1.6.0_0
3\jre\lib\rt.jar,J:\Java\jdk1.6.0_03\jre\lib\sunrsasign.jar,J:\Java\jdk1.6.0_03\
jre\lib\jsse.jar,J:\Java\jdk1.6.0_03\jre\lib\jce.jar,J:\Java\jdk1.6.0_03\jre\lib
\charsets.jar,J:\Java\jdk1.6.0_03\jre\classes,J:\Java\jdk1.6.0_03\jre\lib\ext\su
njce_provider.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\sunmscapi.jar,J:\Java\jdk1.6.0
_03\jre\lib\ext\sunpkcs11.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\dnsns.jar,J:\Java\
jdk1.6.0_03\jre\lib\ext\localedata.jar,J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.cl
ass)]
[正在检查 same1.Src.Src]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializabl
e.class)]
[已写入 Src$C.class]
[已写入 Src.class]
[总时间 1250ms]...\project\StaticImport>javac -g -verbose -Xlint:all StaticImport.java
[解析开始时间 StaticImport.java]
[解析已完成时间 78ms]
[源文件的搜索路径: J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[类文件的搜索路径: J:\Java\jdk1.6.0_03\jre\lib\resources.jar,J:\Java\jdk1.6.0_0
3\jre\lib\rt.jar,J:\Java\jdk1.6.0_03\jre\lib\sunrsasign.jar,J:\Java\jdk1.6.0_03\
jre\lib\jsse.jar,J:\Java\jdk1.6.0_03\jre\lib\jce.jar,J:\Java\jdk1.6.0_03\jre\lib
\charsets.jar,J:\Java\jdk1.6.0_03\jre\classes,J:\Java\jdk1.6.0_03\jre\lib\ext\su
njce_provider.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\sunmscapi.jar,J:\Java\jdk1.6.0
_03\jre\lib\ext\sunpkcs11.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\dnsns.jar,J:\Java\
jdk1.6.0_03\jre\lib\ext\localedata.jar,J:\Java\jdk1.6.0_03\lib\tools.jar,.]
StaticImport.java:2: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src
import static same1.Src.Src.C;
^
StaticImport.java:2: 仅从类和接口静态导入
import static same1.Src.Src.C;
^
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.cl
ass)]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.cl
ass)]
[正在检查 same1.Src.StaticImport]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializabl
e.class)]
[总时间 1031ms]
2 错误
文件得放到 X:\YYY\same1\Src1\ 目录下面
然后在 X:\YYY 目录下面运行
java -cp . same1.Src1.StaticImport
就可以了
一点总结,请指点:小结:
1、有package时,编译命令一定要指 -d 选项,否则不能生成目录,.class直接堆在当前目录下,也不报错,太弱了
....\project\StaticImport>javac -g -d . -verbose -Xlint:all StaticImport.java
2、import可以导入本包的类,尽管是不必要的
3、import static一定要指到类一级,因为是要导入static方法或field
4、在import static同包的静态方法后,不能再用全名访问,必须祼奔。包外的则没有这个限制
5、import有显式导入 , 可以具体到类
隐式 , 最后一级可以具体到包 或 类,对于包只能导入这一个包,不能递归其下面所有包
6、import static有显式导入 , 必须具体到方法 或 field,它们当然是静态的
有隐式 ,最后一级必须具体到类 ,导入这个类的所有静态成员