java字节码转换_Java源程序如何变成Java字节码?
谢邀,题主的问题主要涉及到编译和反编译相关的知识,简单帮你回答⼀下。
编程语⾔
在介绍编译和反编译之前,我们先来简单介绍下编程语⾔(Programming Language)。编程语⾔(Programming Language)分为低级语⾔(Low-level Language)和⾼级语⾔(High-level Language)。
机器语⾔(Machine Language)和汇编语⾔(Assembly Language)属于低级语⾔,直接⽤计算机指令编写程序。
⽽C、C++、Java、Python等属于⾼级语⾔,⽤语句(Statement)编写程序,语句是计算机指令的抽象表⽰。
举个例⼦,同样⼀个语句⽤C语⾔、汇编语⾔和机器语⾔分别表⽰如下:
计算机只能对数字做运算,符号、声⾳、图像在计算机内部都要⽤数字表⽰,指令也不例外,上表中的机器语⾔完全由⼗六进制数字组成。最早的程序员都是直接⽤机器语⾔编程,但是很⿇烦,需要查⼤量的表格来确定每个数字表⽰什么意思,编写出来的程序很不直观,⽽且容易出错,于是有了汇编语⾔,
把机器语⾔中⼀组⼀组的数字⽤助记符(Mnemonic)表⽰,直接⽤这些助记符写出汇编程序,然后让汇编器(Assembler)去查表把助记符替换成数字,也就把汇编语⾔翻译成了机器语⾔。
但是,汇编语⾔⽤起来同样⽐较复杂,后⾯,就衍⽣出了Java、C、C++等⾼级语⾔。
什么是编译
python转java代码上⾯提到语⾔有两种,⼀种低级语⾔,⼀种⾼级语⾔。可以这样简单的理解:低级语⾔是计算机认识的语⾔、⾼级语⾔是程序员认识的语⾔。
那么如何从⾼级语⾔转换成低级语⾔呢?这个过程其实就是编译。
从上⾯的例⼦还可以看出,C语⾔的语句和低级语⾔的指令之间不是简单的⼀⼀对应关系,⼀条a=b+1;语句要翻译成三条汇编或机器指令,这个过程称为编译(Compile),由编译器(Compiler)来完成,显然编译器的功能⽐汇编器要复杂得多。⽤C语⾔编写的程序必须经过编译转成机器指令才能被计算机执⾏,编译需要花⼀些时间,这是⽤⾼级语⾔编程的⼀个缺点,然⽽更多的是优点。⾸先,⽤C语⾔编程更容易,写出来的代码更紧凑,可读性更强,出了错也更容易改正。
将便于⼈编写、阅读、维护的⾼级计算机语⾔所写作的源代码程序,翻译为计算机能解读、运⾏的低阶机器语⾔的程序的过程就是编译。负责这⼀过程的处理的⼯具叫做编译器
现在我们知道了什么是编译,也知道了什么是编译器。不同的语⾔都有⾃⼰的编译器,Java语⾔中负责编译的编译器是⼀个命令:javacjavac是收录于JDK中的Java语⾔编译器。该⼯具可以将后缀名为.java的源⽂件编译为后缀名为.class的可以运⾏于Java虚拟机的字节码。
当我们写完⼀个HelloWorld.java⽂件后,我们可以使⽤javac HelloWorld.java命令来⽣成HelloWorld.class⽂件,这个class类型的⽂件是JVM可以识别的⽂件。通常我们认为这个过程叫做Java语⾔的编译。其实,class⽂件仍然不是机器能够识别的语⾔,因为机器只能识别机器语⾔,还需要JVM再将这种class⽂件类型字节码转换成机器可以识别的机器语⾔。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论