javac编译package包问题
接上篇我们讲了javac命令如何搜索类,https://blog.csdn.net/hello__ZC/article/details/102583870
但是上篇并没有说到它找到类就一定是那个待编译类中使用的类吗,我们知道类名称是可以重复的,但是类的路径是惟一的
类路径=package + className 一个包内是不能存在相同名称的类的,这篇文章我们通过实验看看javac是如何确定是它要找的类呢?
实验一:Test1和Test2同时不指定包名,javac Test1.java编译Test1.java编译成功


![]()
实验解释:编译Test1.java---在本目录中查找Test2.java----找到,类路径为Test2(未指定package) ---发现和Test1同包同在根路径---搜索Test2完成
实验二:Test1不指定指定包名 Test2指定包名,javac Test1.java编译Test1.java编译失败



实验解释:编译Test1.java---在本目录查找Test2.java---找到,类路径为jvm.demo.Test2---由于是和Test1同包都在根路径那么类路径本应该是Test2--编译失败
实验三:同实验二但是编译命令使用 javac -cp ../../ Test1.java 编译依然失败, 在Test1.java中加入import jvm.demo.Test2成功

实验解释:编译Test1.java---在src目录查找Test2.java未找到---到import的包查找,找到
实验四:jvm.demo.Test1 ,Test2 ,jvm.demo1.Test2, Test1未import jvm.demo1.Test2 javac -cp ../../ Test1.java编译失败



![]()
实验解释:编译Test1---在src\jvm\demo查找Test2,找到但是类路径为Test2,应该为jvm.demo.Test2
实验五:同实验五 在jvm.demo.Test1加入import jvm.demo1.Test2编译成功

实验解释:编译Test1---在src\jvm\demo查找Test2,找到但是类路径为Test2,应该为jvm.demo.Test2--然后在import路径查找,找到
实验总结
- 待编译类为default package
1.待编译类为default package 则查找的类是当前目录(使用javac命令所在的目录或-cp指定的目录)
2.若找不到源文件(符号找不到)或找到的源文件的包名不是default package(错误的源文件),则看有没有import 若没有直接编译失败
3.若import在当前目录无此包(程序包不存在),或找不到源文件(符号找不到),或源文件的包名不是import的包名(错误的源文件),否则编译失败
- 待编译类指定包名
1.待编译类为default package 则查找的类是在当前目录+package子目录(使用javac命令所在的目录或-cp指定的目录+package子目录)
2.若找不到源文件或找到的源文件的包名不是default package,则看有没有import 若没有直接编译失败
3.若import在当前目录无此包,或找不到源文件,或源文件的包名不是import的包名,否则编译失败
一般将-cp参数指定的路径或者javac命令所在的路径都使用java源文件的根路径就行了例如src,就不会出现问题
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
