Marqun_king 2022-05-30 10:44 采纳率: 75%
浏览 30
已结题

关于JAVa中的导包相关的细节问题

先给大家看一个截图:

img


代码中用import关键字导入了三个不同jar包下的类,共同点是这三个jar包下的第一个文件夹是com,那么问题来了,如果在import的时候不声明是哪个jar包中的com包,在编译或者是运行的时候,JVM是怎么来进行确认的呢?
目前我有一个猜想:假如说JVM想找com.mysql.*这个目录,则会对所有已导入的jar包一一检索,直到找到含有com.mysql文件夹的jar包,然后再把这里面的类全部加载到内存中.但是万一有另外一个jar包中也含有com.mysql包呢?所以该猜想可能不成立.
所以还请指点一二

  • 写回答

4条回答 默认 最新

  • 微笑精灵 2022-06-01 18:15
    关注

    1.你这个只是第一级目录相同,下级目录并不一样,所以算不上同目录。我们导入的 包都是1.2.3.4.5,所以导入的都是明确的最后一个跟前面没有太大关系,只是一个路径而已
    2.路径不会相同,即便相同也有文件名不同,文件名相同的情况就按照类的装载顺序覆盖
    3.至于你说的寻找,那个就是你导入多少我拿多少,当然用于不用是另一回事,所以占空间而已,跟寻找没啥关系吧。当然也影响编译速度,虽然几乎没有,jar大小也没影响
    4.寻找也是用哪个找那个,毕竟路径不是光给你看的,路径的意义除了明确结构,组织以外,还有面向对象的思想。同时也避免说我有两个a.java分别在不同包下,java不知道用哪个的情况
    5.项目中的路径不是你想的那样,说不同包不是代表一个文件夹下多个同名文件夹,他就像你的电脑目录一样,同名只会有一个。你建立的那些同名最终还是会变成一个目录
    6.运行的时候不是你想的那样全拿进来,实际上编译是一个很复杂的事情,这里面事情很多的,你要是有兴趣可以去看看
    7.至于他怎么找到目标类加载这个我猜是类似于二分法的找法,另外没必要纠结这点小东西,他们的影响几乎没有
    8。不管怎么导报,他都是用哪个加载哪个,不用的不加载

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月13日
  • 已采纳回答 6月5日
  • 创建了问题 5月30日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号