首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;(本文由广州达内http://www.jvtarena.com/zhiyeqianjing/为你分享;)
问题:
请问为何会出现Step6中的错误呢?使用 “import a.*;”导入a下所有类和接口,和使用“import a.World;”导入a包中具体的类,为何会产生上述的差异呢?
回答
当你导入一个包中所有的类时,javac在编译时并不确定你要使用的World类是a包中的类,还是其他包中的类,它会根据你机器上的CLASSPATH环境变量的值去查找类,通常我们在CLASSPATH中会设置一个点(.),表示当前目录,如果没有CLASSPATH环境变量,那么在JDK1.4之后,默认也是查找当前目录。javac在按照文件名(不包括后缀)来查找类,于是找到World.java,而这个文件根本不是字节码文件,当然就报错了。当你导入一个具体的类时,javac在分析源文件时就知道了你程序中用的类是a.World,那么它就在CLASSPATH环境变量下查找a目录下的World类,正好有,于是正确执行。
为了帮助读者对这个问题加深理解,我给大家设计了下面的操作步骤(本文是在D盘上操作):
(1)将a目录剪切到C:\下;
(2)再次执行javac Hello.java,你会看到同样的错误。也就是证实了在出错之前,javac还没有去查找a包中的类(对于包是否存在的验证已经进行)。
(3)执行set classpath=c:\。由于你明确地设置了CLASSPATH环境变量的值,并且没有包含点(.),因此javac不会再查找当前的目录。
(4)再次执行javac Hello.java,你会发现成功执行。
这里面还有一个有趣的现象,如果我们将a目录下的World.class删除,替换为World.java,那么在编译Hello.java时,World也会被自动编译。
从基础的学习到后面应用提高都非常的系统,无论你是本专业的还是跨专业的,都能有所收获,参加4个月的达内时光转眼已逝,伴随着喜悦,达内给你一个新的平台,一个崭新的开始。
java怎么导入下载的tar包作为依赖 java导入其他包的类
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java Excel导入导出
Java的两种方式操作Excel
数据 java excel 导出数据 -
安装centos7 配置dns
一:机群数量看公司业务需求,至少要三台。作者这里做演示,所以使用VM虚拟三台主机(cdh不支持docker_cluster)。对于物理主机请参考作者另一篇文章制作好Centos启动盘[1]。接下来开始装Centos,我用的是7.6dvd中basic webserver,添加了perl依赖的安装模式,因为mysql安装和cdh安装需要perl,关于内存设置我等下会讲,现在先搭一个机器出来。
安装centos7 配置dns centos7 dns配置 centos7 关闭selinux centos7 运行 jar centos7修改主机名