导入jar等第三方类库(无源码)时,编译器是怎样识别接口的?

eks_222 2010-07-20 06:45:35
hi:
我有个疑问就是,写程序的时候要用到一些库,jdk的标准库也算...
在import一些包的时候,比如是我
import java.util.HashMap;
然后在程序中new了一个HashMap,这个过程编译器是如何超找到HashMap这个类型的定义的?
一开始我因为是loadclass的时候jvm 在link的时候才做这件事,但想想感觉有问题,在编译器编译我的源文件的时候他是如何识别到HashMap这个类型的?是同个.class文件暴露出来的接口么?(或者有无接口?呵呵)


谢谢 ^_^
...全文
155 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
eks_222 2010-07-24
  • 打赏
  • 举报
回复
谢谢回复...
请问?编译的时候有使用到jvm么?
我一直以为这是调用javac那个编译器?
如果没有调用到jvm的话,他有怎么知道class文件里面有什么呢?对这方面不是很了解...
[Quote=引用 9 楼 spiniper 的回复:]

这不是很容易理解的问题么,一个能够在运行时找到的东西,在编译时不是一样的可以找到么?
HashMap本身就在jre的内部,javac跑到jdk或者jre里面把HashMap.class找出来不是很容易的事情么?
在运行时,jvm通过调用ClassLoader来加载class文件,那在编译时同样可以调用ClassLoader来查找class文件,好像没有谁规定编译时不能做运行时时候的事情吧?
……
[/Quote]
heartraid86 2010-07-24
  • 打赏
  • 举报
回复
LZ一定是用多了IDE了吧,如果每次都用命令行来编译,就会知道很多路径是我们告诉编译器的。

使用编译器来编译Java程序的命令式 javac - ..., 其中有几种命令格式:

(1) javac e:/project/Test.java 如果Test中有JDK类库中的类,比如LZ说的HashMap,还记得安装JDK之后的环境变量的配置吗?那里面会记录下JDK类库所在的位置,Java编译器会自动去那里找现成的HashMap.class。

(2) javac -cp c:/single.jar e:/project/Test.java 如果Test中需要用到自定义的类,而这个类在single.jar中的话,那么编译的时候必须给出这个jar的路径,自然编译器也能够找到这个类。

这里是我写的一个博客,可以去看看:http://hxraid.javaeye.com/admin/blogs/508123
eks_222 2010-07-21
  • 打赏
  • 举报
回复
请问有无人了解这方面的知识呢?谢谢
树成 2010-07-21
  • 打赏
  • 举报
回复
这不是很容易理解的问题么,一个能够在运行时找到的东西,在编译时不是一样的可以找到么?
HashMap本身就在jre的内部,javac跑到jdk或者jre里面把HashMap.class找出来不是很容易的事情么?
在运行时,jvm通过调用ClassLoader来加载class文件,那在编译时同样可以调用ClassLoader来查找class文件,好像没有谁规定编译时不能做运行时时候的事情吧?
eks_222 2010-07-21
  • 打赏
  • 举报
回复
请问有无人了解这方面的知识呢?
需要涉及到class文件的文件格式么?
eks_222 2010-07-20
  • 打赏
  • 举报
回复
但是在编译的时候(即还没有生成可在jvm上执行的class文件)
编译器是如何识别这些定义在别的文件(别的包)里面的类类型的呢?
是不是这个语句 package 做了什么事呢?

thanks

[Quote=引用 5 楼 problc 的回复:]

class文件虚拟机是认识的,里面包含所有类相关信息。
class文件都能反编译,什么信息都能得到。
[/Quote]
problc 2010-07-20
  • 打赏
  • 举报
回复
class文件虚拟机是认识的,里面包含所有类相关信息。
class文件都能反编译,什么信息都能得到。
eks_222 2010-07-20
  • 打赏
  • 举报
回复
thx for replying
但我有个因为就是你指定了classpath,那个地方是一个class文件呀,class文件有暴露出什么接口么?
谢谢..

[Quote=引用 2 楼 xinlan1022 的回复:]

classpath
[/Quote]
ganyiboy 2010-07-20
  • 打赏
  • 举报
回复
可能同上,这个我真的不懂。
xinlan1022 2010-07-20
  • 打赏
  • 举报
回复
classpath
config_man 2010-07-20
  • 打赏
  • 举报
回复
感觉很深奥...坐等牛人!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧