社区
Java SE
帖子详情
编译器在把.java文件变成.class文件的过程中都干了些啥?
woodfans
2004-12-27 03:55:55
刚看到《thinking in java》里的第四章 构造和初始化 里写道这样一句话:由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法。该做何理解,大人指教!
...全文
264
20
打赏
收藏
编译器在把.java文件变成.class文件的过程中都干了些啥?
刚看到《thinking in java》里的第四章 构造和初始化 里写道这样一句话:由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法。该做何理解,大人指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
woodfans
2004-12-27
打赏
举报
回复
晕,我错了还不行吗...........
night__cat
2004-12-27
打赏
举报
回复
猪啊.这也要问吗?.class文件是字节码,java虚拟机就是执行这个的.他不是象exe那样的可执行文件,没有虚拟机就执行不了.
woodfans
2004-12-27
打赏
举报
回复
没人啦,俺也歇着去
woodfans
2004-12-27
打赏
举报
回复
to jFresH_MaN():
那这句话“由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法.
”
怎么解释啊?javac调用构造函数?分配内存?
woodfans
2004-12-27
打赏
举报
回复
to jFresH_MaN():
嘿嘿,那你得去问问那个神奇的编译器都干了些什么喽!
jFresH_MaN
2004-12-27
打赏
举报
回复
javac就是编译器
我个人觉得编译过程和jvm无关。
只有解释和执行class文件的时候才和jvm挂上钩
jFresH_MaN
2004-12-27
打赏
举报
回复
我也来学习一下,呵呵
大家讨论地不错,看有没有什么新的想法
我主要是想知道编译java文件到class文件的过程细节
如果只是说编译成二进制文件,那这谁都知道,不知道有没有大侠对这个所谓的二进制文件有什么想法。
woodfans
2004-12-27
打赏
举报
回复
to EverythingMaster:你说的意思我明白。
顺便问个问题,这里的编译器指的是啥?我觉得有点抽象啊,不大明白
fuwang
2004-12-27
打赏
举报
回复
建议楼主先看浅显的书,如java核心技术I
fuwang
2004-12-27
打赏
举报
回复
楼上的错了,应该是
javac -verbose XXX.java
由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法.
这是因为有多个构造函数,产生了重载,编译器根据构造函数的参数的类型和个数决定调用哪一个。
EverythingMaster
2004-12-27
打赏
举报
回复
你说的thinking in java中的问题,意思是说,需要采用一种机制来告诉编译器在为对象分配内存时能够自动执行一些必要的初始化操作。那么java采取的方法与c++是一样的,就是与类名同名的方法为构造方法,编译器会自动调用这个方法执行初始化,如果没有显式声明,那就执行默认方法。
射天狼
2004-12-27
打赏
举报
回复
还真不知道:(
woodfans
2004-12-27
打赏
举报
回复
对了,由于构造函数是由编译器调用的,因此编译器必须要知道能调用哪个方法。这句话里的编译器我觉得应该是指jvm才对,这样应该就没有什么问题了
woodfans
2004-12-27
打赏
举报
回复
应该是javac -verbose XXX
[parsing started Test.java]
[parsing completed 156ms]
[loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/lang/Object.class)]
[loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/lang/String.class)]
[checking Test]
[loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/lang/System.class)]
[loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/io/PrintStream.class)]
[loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/io/FilterOutputStream.class)]
[loading C:\j2sdk1.4.1_05\jre\lib\rt.jar(java/io/OutputStream.class)]
[wrote Test.class]
[total 609ms]
EverythingMaster
2004-12-27
打赏
举报
回复
把程序代码编译成字节码,这个字节码(.class文件)在任何有jvm的平台上都能运行。
这也是java的聪明之处,借此它说一处编译,多处运行。至于java XXX.class的时候,jvm会把字节码转换成相应平台的机器代码来运行。
woodfans
2004-12-27
打赏
举报
回复
to tomuno:那是jvm干的事情吧,class文件还不是机器语言吧
kaymo
2004-12-27
打赏
举报
回复
java -verbose : class XXX//XXX为你的java文件
可以看看过程
woodfans
2004-12-27
打赏
举报
回复
我也有那本书,买了还没看,惭愧.......
javap我也用过,不过好像跟这个没啥关系吧
tomuno
2004-12-27
打赏
举报
回复
把高级语言翻译未机器语言
jFresH_MaN
2004-12-27
打赏
举报
回复
说实话,学了那么久java,还真不知道楼主标题上的问题。
我现在手头上有《深入java虚拟机》,但还没看,我想以后看了会有点眉目吧!
如果楼主想了解这类的支持看看javap命令和我说的书吧
Java
内核原理入门到实战(大神必经之路)
Java
语言是体系结构
中
立的:
Java
程序(后缀为
java
的
文件
)在
Java
平台上被编译为体系结构
中
立的字节码格式(后缀为
class
的
文件
),然后可以在实现这个
Java
平台的任何系统
中
运行。这种途径适合于异构的...
java
之
class
文件
解析
我们知道
java
文件
在经过编译之后就会生成字节码
文件
,即.
class
文件
。随后.
class
文件
就会被对应类加载器加载到内存
中
。那么是不是存在这么一种可能,我自创一种编程语言,然后使用自己的
编译器
将其编译成为JVM所...
jvm学习笔记1--
java
代码编译、执行
过程
及
class
文件
的解读
Java
代码编译是由
Java
源码
编译器
来完成,也就是
Java
代码到JVM字节码(.
class
文件
)的
过程
。使用命令:
java
c hello.
java
就会生成hello.
class
。这里不过多的对此展开,有兴趣的可以自行百度。 2.类
文件
(
class
文件
) ...
带你一步步认识
class
文件
JVM的语言无关性 ...
Java
虚拟机不和包括
java
在内的任何语言绑定,它只与”
Class
文件
”这种特定的二进制
文件
格式所关联。
Class
文件
中
包含了
Java
虚拟机指集合符号以及若
干
其他辅助信息。
Class
类
文件
(了解.
理解JVM的
class
文件
结构
开发者将
Java
代码写在.
java
文件
中
,经过
编译器
的编译生成了
class
文件
,原来在
Java
文件
中
定义的信息将转存到
class
文件
中
。只有经过编译后的
class
文件
才能被虚拟机理解,JVM才能将
文件
中
的内容转换成其自己的内存...
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章