Java:package和import的运行逻辑

运行逻辑
  1. 编译时import 检查是否存在此类,存在则编译。
  2. 代码中的类是否是全名类(带命名空间)。存在,编译载入。
  3. 类的引用表中是否明确指明引用类。存在,编译载入。
  4. 无命名空间类是否可与与classpath目录下匹配。存在,编译载入。
  5. 检查相对类引用表中是否存在。存在,编译载入;多个,报错。
  6. 不存在,报错。

运作原理

①生成classpath列表。(即获取classpath的值)

②生成类引用表和相对类引用表(例如:在代码中出现import packagename.classname,即将packagename.classname放入类引用表中,在代码中出现import packagename.*,即将packagename.*放入相对类引用表中)

③通过classpath列表分别与类引用表和相对类应用表进行组合,看是否能定位到相应的类或者包,如不能定位或者能够定位一个以上的同名类则报错,否则对相应的类进行编译。

④代码中引用的类是否使用全名(即是否在代码中使用了类的包名),是则转向⑤,否则转向⑥
⑤将全名类与classpath列表匹配定位,对找到的第一个类进行编译,没有找到则报错。

⑥将代码中的无命名空间类与classpath列表匹配,对找到的第一个类进行编译,否则转向⑦

⑦根据classpath列表和相对类引用表进行匹配,看能否定位代码中对应的类。定位到一个则编译,没有或者一个以上则报错。

测试方法
常规测试。即两个类没有任何package和import。
将被调用类加载命名空间,并编译主类。(以联编方式)
  • 被调用类存在于正确的命名空间下
  • 被调用类同时存在于正确的命名空间下和与主目录平行的位置
  • 被调用类的命名空间相对路径存在于与主目录不平行的位置
  • 以不同的classpath顺序进行编译运行。
配置好相应目录结构和Java源文件
  • 在主类中import不同包下的同名类
  • 移去与主类平行的类
  • 在import中指明被调用类或在主类中指明被调用类的命名空间
  • 在主类中import与主类不平行的命名空间。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值