黑马程序员技术交流社区

标题: 字节码文件的问题 [打印本页]

作者: 吴扬    时间: 2012-7-9 23:10
标题: 字节码文件的问题
本帖最后由 吴扬 于 2012-7-10 13:15 编辑

当我们编写好的java源文件被编译器编译生成.class文件后,这个.class文件就是字节码文件吗?
还是当这个.class文件被加载进内存之后才叫做字节码文件?这里有点不太明白,希望有人能够指点下迷津,谢谢!
作者: 陈冲    时间: 2012-7-9 23:18
*.class文件就是字节码文件。
至于加载进内存,是把文件的内容以字节流的形式存入内存中
作者: 朱烈葵    时间: 2012-7-9 23:20
对,这是字节码文件,只要文件时。java编译出来的。class文件就是字节码文件,这和加不加载进去内存没什么关系。
作者: 柯玲    时间: 2012-7-9 23:27
本帖最后由 柯玲 于 2012-7-10 06:36 编辑

.class文件里的内容不是字节码文件,因为在编译成.class文件的过程中,只是对java文件的翻译,检查是否符合java语法规定。                                                                                          在高新视频里注解这块,张老师纠正了一个概念:class文件里的东西不是字节码,只有把class文件里的东西加载进内存以后,类加载器加载完以后才对class文件加载的东西进行处理(如安全检查等其它操作),得到最终在内存里的二进制东西才是字节码。
作者: 刘煜    时间: 2012-7-10 01:49
本帖最后由 刘煜 于 2012-7-10 02:04 编辑

.class文件就是字节码文件。字节码文件是一种二进制的类文件,通常这些文件是由编译器从Java语言源代码经过编译器编译之后生成的,存储在扩展名为.class的文件中,而不像C、C++经由编译器直接生成机器码。字节码文件经过编译后的内容是由JVM规范定义的,是JVM的指令,字节码文件加载到内存实际上就是字节码文件的指令在JVM上运行,完成各种数据在内存中的操作,这也说明.class文件本身就是字节码文件,并不是被加载内存中才叫字节码文件。
此外通过查找资料,加上自己的总结,再给你介绍一下类在JVM中的工作原理,希望对你理解有帮助:

要想使用一个Java类为自己工作,必须经过以下几个过程:
1):类加载load:字节码二进制文件(.class文件)将类加载到内存,从而达到类的从硬盘上到内存上的一个迁移,所有的程序必须加载到内存才能工作。将内存中的class放到运行时数据区的方法区内,之后在堆区建立一个java.lang.Class对象,用来封装方法区的数据结构。这个时候就体现出了毕老师所说的万事万物皆对象了,干什么事情都得有个对象。类加载的最终产物就是堆中的一个java.lang.Class对象
2):连接:连接又分为以下小步骤
验证:出于安全性的考虑,验证内存中的字节码是否符合JVM的规范,类的结构规范、语义检查、字节码操作是否合法、这个是为了防止用户自己建立一个非法的XX.class文件就进行工作了,或者是JVM版本冲突的问题
准备:将类的静态变量进行分配内存空间、初始化默认值。(对象还没生成呢,所以这个时候没有实例变量什么事情)
解析:把类的符号引用转为直接引用保留
3):类的初始化: 将类的静态变量赋予正确的初始值,这个初始值是开发者自己定义时赋予的初始值,而不是默认值。
作者: 孙新强    时间: 2012-7-10 12:41
.class文件就是字节码文件。加载进内存后也是字节码文件。总之,javac编译后的文件就是字节码文件。
对于一个java程序的执行过程剖析如下:
java程序执行过程:
Java源文件(*.java)——>Java编译器——>字节码文件(*.class)——>类装载器——>字节码校检器——>解释器——>操作系统(Windows、Linux等)整个文件Load到内存区,一系列动作之后形成操作系统认识的代码,操作系统找到main方法开始实行。
说明:
1)在程序执行时,Java的源文件,即*.java文件,先由Java编译器编译成宁节码文件,即*.class文件;
2)类加载器把一个编译好的*.class类装入JAVA虚拟机,这个过程需要经过三个步骤来完成:装载、链接、初始化,其中链接又分来校验、准备、解析过程
      装载:查找和导入.class文件
      连接:检查装入.class文件的正确性,然后,java虚拟机为变量分配内存,设置默认值
      初始化:把符号引用变成直接引用。。。
    3)一系列动作完成后,操作系统找到main方法开始执行程序;

作者: 吴扬    时间: 2012-7-10 13:15
谢谢大家,明白了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2