java虚拟机编译代码 java虚拟机源码解析

java编译和运行 。当你一段代码写完之后一般会经历两个阶段:
1、编译阶段
使用指令:javac
这个阶段 , Java编译器(也就是JVM:java虚拟机,后称JVM) , 首先把你的代码加载完成,然后开始检查语法 。如果出现语法错误则提示错误 。这个阶段提示的错误我们一般称为编译器错误!
2、运行阶段
使用指令:java
这个阶段 , JVM将执行java代码 , 这个时期出现的错误我们一般称为运行期错误!
【java虚拟机编译代码 java虚拟机源码解析】编译器错误一般都是语法错误!运行期错误一般都是程序内部(或者程序逻辑)错误!
你说的这个错误就是语法错误!
java规定了在静态方法中不能调用非静态的方法 。这个错误已经被整合到了语法错误里面!
java语言为什么使用的java虚拟机而不是直接翻译成机器代码(即和C语言一样)?Java语言的一个非常重要的特点就是与平台的无关性 。而使用Java虚拟机是实现这一特点的关键 。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码 。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译 。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行 。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行 。Java虚拟机的使用主体
java编译器把java程序编译成虚拟机可以识别的二进制代码,称为什么?由java编译器把源文件编译成虚拟机可以识别的二进制代码称为字节码 。
而字节码是由java解释器去解释执行的 。
简述JAVA程序的编辑编译和运行过程第一步(编译): 创建完源文件之后,程序会先被编译为.class文件 。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用 , 这个有点象make 。
如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cant find symbol”的错误 。
第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载 2、类的执行 。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类 。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次 。
特别说明:java类中所有public和protected的实例方法都采用动态绑定机制 , 所有私有方法、静态方法、构造器及初始化方法clinit都是采用静态绑定机制 。而使用动态绑定机制的时候会用到方法表,静态绑定时并不会用到 。
扩展资料:
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程 。
Java代码编译:是由Java源码编译器来完成;
Java字节码的执行:是由JVM执行引擎来完成
Java程序从源文件创建到程序运行要经过两大步骤:
1、源文件由编译器编译成字节码(ByteCode)
2、字节码由java虚拟机解释运行 。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language) 。
什么是Java代码的编译与反编译?Java代码的编译与反编译
2017-02-21Hollis数盟
一、什么是编译
1、利用编译程序从源语言编写的源程序产生目标程序的过程 。
2、用编译程序产生目标程序的动作 。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0 , 编译程序把人们熟悉的语言换成2进制的 。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成 。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息 。
二、什么是反编译
计算机软件反向工程(Reverseengineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码 。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中 。
三、Java类的编译与反编译
我们在最初学习Java的时候,会接触到两个命令:javac和java,那个时候我们就知道,javac是用来编译Java类的,就是将我们写好的helloworld.java文件编译成helloworld.class文件 。
class文件打破了C或者C等语言所遵循的传统,使用这些传统语言写的程序通常首先被编译 , 然后被连接成单独的、专门支持特定硬件平台和操作系统的二进制文件 。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作 。而Javaclass文件是可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件 。
那么反编译呢,就是通过helloworld.class文件得到java文件(或者说是程序员能看懂的Java文件)
四、什么时候会用到反编译
1、我们只有一个类的class文件,但是我们又看不懂Java的class文件,那么我们可以把它反编译成我们可以看得懂的文件 。
2、学习Java过程中,JDK的每个版本都会加入越来越多的语法糖,有些时候我们想知道Java一些实现细节,我们可以借助反编译 。
五、反编译工具
1、javap
2、Jad:官网(墙裂推荐)
客户端:
可以在官网下载可执行文件,找到对应的操作系统的对应版本,然后进行安装使用 。
因为我使用的是linux操作系统 , 所以我下载的是Linux版本的工具,这个工具下载好之后会有一个执行文件 , 只要在执行文件所在目录执行./jadhelloworld.class就会在当前目录下生成helloworld.jad文件,该文件里就是我们很熟悉的Java代码
Eclipse插件:
下载地址在官网下载插件的jar包,然后将jar包放到eclipse的plugins目录下‘在打开Eclipse,Eclipse-Window-Preferences-Java,此时你会发现会比原来多了一个JadClipse的选项,单击,在Pathtodecompiler中输入你刚才放置jad.exe的位置,也可以制定临时文件的目录 。当然在JadClipse下还有一些子选项,如Debug,Directives等,按照默认配置即可 。基本配置完毕后 , 我们可以查看一下class文件的默认打开方式,Eclipse-Window-Preferences-General-Editors-FileAssociations我们可以看到class文件的打开方式有两个,JadClipse和Eclipse自带的ClassFileViewer,而JadClipse是默认的 。全部配置完成,下面我们可以查看源码了,选择需要查看的类,按F3即可查看源码
java 虚拟机可以使用java编写吗1.JAVA虚拟机可以看成是解释执行(比如basic语言)字节代码的计算机 。
2.Java本身的编译器用Java语言编写 , 执行代码的虚拟机用C语言实现 。
3.Java语言的执行模式是半编译和半解释型,程序首先由编译器转换为标准字节代码,然后由Java虚拟机去解释执行,字节代码实际上可以看作是虚拟机的机器代码 。
4.JAVA虚拟机实现了代码与硬件和操作系统的隔离 , 做到了较强的可移植性 。
关于java虚拟机编译代码和java虚拟机源码解析的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读