首页编程java编程java 机器码是什么?什么是Java字节码

java 机器码是什么?什么是Java字节码

编程之家2023-10-1391次浏览

大家好,关于java 机器码是什么很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于什么是Java字节码的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

java 机器码是什么?什么是Java字节码

java工作原理

Java工作原理

由四方面组成:

(1)Java编程语言

java 机器码是什么?什么是Java字节码

(2)Java类文件格式

(3)Java虚拟机

(4)Java应用程序接口

java 机器码是什么?什么是Java字节码

当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。

什么是Java字节码

它是程序的一种低级表示,可以运行于Java虚拟机上。将程序抽象成字节码可以保证Java程序在各种设备上的运行

Java号称是一门“一次编译到处运行”的语言,从我们写的java文件到通过编译器编译成java字节码文件(.class文件),这个过程是java编译过程;而我们的java虚拟机执行的就是字节码文件。不论该字节码文件来自何方,由哪种编译器编译,甚至是手写字节码文件,只要符合java虚拟机的规范,那么它就能够执行该字节码文件。

JAVA程序的运行

因为Java具有跨平台特性,为了实现这个特性Java执行在一台虚拟机上,这台虚拟机也就是JVM,Java通过JVM屏蔽了不同平台之间的差异,从而做到一次编译到处执行。JVM位于Java编译器和OS平台之间,Java编译器只需面向JVM,生成JVM能理解的代码,这个代码即字节码,JVM再将字节码翻译成真实机器所能理解的二进制机器码。

字节码是怎么产生的?

我们所编写的程序都是.java格式,通常在执行的时候也许点击一下eclipse的运行键就可以在控制台看到运行结果,但是也可以更酷一些,如果你装了JDK,那就可以直接在以命令行的方式编译运行你的.java文件,编译后会形成.class文件,这个.class文件即字节码。

字节码怎么解读?

上图是编译好的字节码文件,即一堆16进制的字节,如果使用IDE去打开,也许看到的是已经被反编译的我们所熟悉的java代码,但这才是纯正的字节码

这里只介绍字节码由哪些部分组成,具体的意思自行百度或者看文尾的连接,有较为详细的讲解

上图即字节码文件的组成部分, Class文件的结构不像XML等描述语言那样松散自由。由于它没有任何分隔符号,

所以,以上数据项无论是顺序还是数量都是被严格限定的。哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变,如上图左侧即每一部分规定的长度

魔数(Magic Number)

魔数是用来区分文件类型的一种标志,一般都是用文件的前几个字节来表示。

比如0XCAFE BABE表示的是class文件,那么有人会问,文件类型可以通过文件名后缀来判断啊?是的,但是文件名是可以修改的(包括后缀),那么为了保证文件的安全性,将文件类型写在文件内部来保证不被篡改。

至于为什么是CAFE BABE估计大家也能猜到,程序员与咖啡的不解之缘

版本号(Version)

版本号含主版本号和次版本号,都是各占2个字节。在此Demo种为0X0000 0033。其中前面的0000是次版本号,后面的0033是主版本号。通过进制转换得到的是次版本号为0,主版本号为51。高版本的JDK能向下兼容以前版本的Class文件,但不能运行以后版本的Class文件,即使文件格式未发生任何变化.这就是target参数的用处,可以在使用JDK 1.7编译时指定-target 1.5

常量池(Constant Pool)

常量池是Class文件中的资源仓库,量池中主要存储2大类常量:字面量和符号引用。字面量如文本字符串,java中声明为final的常量值等等,而符号引用如类和接口的全局限定名,字段的名称和描述符,方法的名称和描述符。常量池是一个表结构,在表的内容前有一个类型的计数器,表示常量池的长度

上面的表中描述了11中数据类型的结构,其实在jdk1.7之后又增加了3种(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。这样算起来一共是14种

访问标志(Access_Flag)

访问标志信息包括该Class文件是类还是接口,是否被定义成public,是否是abstract,如果是类,是否被声明成final。通过上面的源代码,我们知道该文件是类并且是public。

0x 00 21:是0×0020和0×0001的并集。其中0×0020这个标志值涉及到字节码指令

类索引(This Class Name)

类索引用于确定类的全限定名

0×00 03表示引用第3个常量,同时第3个常量引用第19个常量,查找得”com/demo/Demo”。#3.#19

父类索引(Super Class Name)

0×00 04同理:#4.#20(java/lang/Object)

接口索引(Interfaces)

通过上边字节码图可以看到,这个接口有2+n个字节,前两个字节表示的是接口数量,后面跟着就是接口的表。我们这个类没有任何接口,所以应该是0000。果不其然,查找字节码文件得到的就是0000。

字段表集合(fields)

字段表用于描述类和接口中声明的变量。这里的字段包含了类级别变量以及实例变量,但是不包括方法内部声明的局部变量。接下来就是2+n个字段属性。我们只有一个属性a,所以应该是0001。查找文件果不其然是0001。

该区域含有字段的访问标志,访问权限,字段的名称索引,字段的描述符索引,属性表

描述符的作用就是用来描述字段的数据类型、方法的参数列表和返回值。而属性表就是为字段表和方法表提供额外信息的表结构。对于字段来说,此处如果将字段声明为一个static final msg="aaa"的常量,则字段后就会跟着一个属性表,其中存在一项名为ConstantValue,指向常量池中的一个常量,值为的"aaa"。

方法(methods)

包含访问标志表,方法名索引,方法描述符索引,属性表数量,等

Attribute

0×0001:同样的,表示有1个Attributes了。

0x000f:#15(“SourceFile”)

0×0000 0002 attribute_length=2

0×0010: sourcefile_index=#16(“Demo.java”)

SourceFile属性用来记录生成该Class文件的源码文件名称。

java是什么语言

1、Java是一种计算机编程语言

java是一种计算机语言

语言我们说的普通话、英语都是语言,语言是一种交流的工具,语言具有创造性和结构性,并且代表一定的意义。比如我说下课了,大家都明白什么意思,证明这个语句的意思表达清楚了,正规的语言在交流上是不能有歧义的。计算机编程计算机编程就是:把程序员的要求和设想,按照能够让计算机看得懂的规则和约定,编写出来的过程,就是编程。编程的结果就是一些计算机能够看懂并能够执行和处理的东西,我们把它叫做软件或者程序。事实上,程序就是我们对计算机发出的命令集(指令集)。Java是一种计算机编程语言首先,Java是一种语言,也就是 Java是用来交流的,那么用来谁和谁交流呢?很明显就是程序员和计算机交流,换句话说把我们的要求和设想用Java语言表达出来,那么计算机能看懂,就能够按照我们要求运行,而这个过程就是我们所说的使用Java编程,所以我们讲 Java是一种计算机编程语言。为了让计算机看懂,Java会有一系列的规则和约定,这些就是 Java的语法。

2、Java是一种软件开发平台什么是软件开发可以简单地理解为:编程的结果是软件或者程序,而编程的过程就是软件开发。软件开发的基本步骤包括:需求分析、概要设计、详细设计、编码、测试、维护等阶段。需求分析:这里指的需求不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据……为了清楚地知道这些需求,你经常要和客户、项目经理以及项目伙伴调查研究,这就是需求分析。概要设计、详细设计:根据软件系统需求完成对系统的设计,确定强壮的系统架构,设计模块层次、用户界面和数据库表结构。编码:开发代码,完成设计的具体实现。测试:利用测试工具按照测试方案和业务流程对产品进行功能和性能测试,对测试方案可能出现的问题进行分析和评估,并修改代码。维护:根据用户需求的变化或硬件环境的变化,对应用程序进行部分或全部的修改。用以下的流程图来表达这个过程:

java语言软件开发流程

什么是开发平台?在软件开发的过程中,我们需要很多的工具来辅助我们的工作,不可能什么都从头自己做。我们把编程的环境和相应的辅助工具统称为开发环境,开发平台就是用来提供这个开发环境的。车床工人需要一个车床才能工作一样。

java是一个开发平台

Java是一种开发平台Java不单纯是一个编程的语言,它自身提供了一系列开发 Java所需要的环境和工具,来进行编译、解释、文档生成、打包等,比如:javac.exe、javadoc.exe等等,这些我们后面会讲到,所以我们讲 Java是一个开发平台。3、Java是一种软件运行平台什么是软件的运行平台如同人类需要阳光、空气、水和食物才能正常存活一样,软件最终要能够运行,也需要一系列的外部环境,来为软件的运行提供支持,而提供这些支持的就是运行平台。Java是一种软件运行平台Java本身提供 Java软件所需要的运行环境,Java应用可运行在安装了 JRE(Java Runtime Environment)的机器上,所以我们说 Java是一个运行平台。JRE:Java Runtime Environment,Java运行环境。4、Java是一种软件部署环境什么是软件的部署简单地讲,部署就是安装,就是把软件放置到相应的地方,并且进行相应的配置(一般称作部署描述)让软件能够正常运行起来。Java是一种软件部署环境Java本身是一个开发的平台,开发后的Java程序也是运行在Java平台上的。也就是说,开发后的Java程序也是部署在Java平台上的,这个尤其在后面学习JEE(Java的企业版)的时候,体现更为明显。

关于java 机器码是什么和什么是Java字节码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

java sts.exe是什么 Java要怎么自学统计图有哪些(统计图有哪些?)