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 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签)
  • ¥50 sft下载大文阻塞卡死