Java编译执行过程
在刷软件设计师中级考试的题目,判断关于编译系统对某高级语言进行翻译的叙述的对错。记得刚开始学Java的时候自己就觉得自己对程序的执行过程理解的相当的透彻,但是一对答案,我的小心脏就有点受不了了,特此在这记录一下,希望自己之后不要在弄错了。
1,编译过程概述
编译程序的功能是把某高级语言书写的源代码翻译成与之等价的目标程序(汇编语言或机器语言)。编译工作的过程可以分为6个阶段。如下图所示,在实际的编译中可能会将其中的某些阶段结合在一起。
1)词法分析
词法分析是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词”符号。语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。
2)语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。
3)语义分析
语义分析阶段主要检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。特别注意:只有语法和语义都正确的源程序才能被翻译成正确的目标代码。
4)中间代码生成
中间代码的生成阶段是根据语义分析的输出生成中间代码(一种简单且含义明确的记号系统)。需要注意的是中间代码与机器无关,可以有若干种形式,可以将不同的高级语言程序翻译成同一种中间代码,因为与机器无关,使得中间代码有利于进行与机器无关的优化处理,以提高编译程序的可移植性。中间代码的表达形式有四元式,三元式,间接三元式,波兰式,逆波兰式等。
5)优化
在于对前段代码产生的中间代码进行加工,以期在最后的阶段产生更为高效(省时间和空间)的代码。
6)目标代码生成
目标代码生成是编译器工作的最后一个阶段。这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
源程序不可避免地会有一些错误,这些错误大致可分为语法错误和语义错误。语法错误是指语言结构上的使用错误,是指编译时所发现的程序错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
2,下面可以说说Java程序的编译过程了
从上面图中可以看出java程序的执行过程分为编译和执行的过程:java源代码(.java文件)通过javac.exe编译阶段的相关过程生成中间代码再到字节码文件(.class)最后由java.exe执行输出最后的结果。
- 感谢你的阅读,如果有什么不正确的地方欢迎指正,希望与大家共同学习,一起进步。
- 该文章网址:https://www.cnblogs.com/cnqijian/p/13894006.html
- 该文章参考了软件设计师教程
- 如你想转载请你表明来源
- 一天进步一小步
Java编译执行过程的更多相关文章
- Java基础之Java编译运行过程
Java编译运行过程 程序员所编写的是以.java为后缀的文件,此文件操作系统不能正确识别,因此,首先要经过编译,生成所谓的字节码文件(.class),而字节码文件需要JVM来提供运行环境的支持. J ...
- Java程序执行过程及内存机制
本讲将介绍Java代码是如何一步步运行起来的,其中涉及的编译器,类加载器,字节码校验器,解释器和JIT编译器在整个过程中是发挥着怎样的作用.此外还会介绍Java程序所占用的内存是被如何管理的:堆.栈和 ...
- C#编译执行过程
前言 大家好,我是卫斯理(Wesley).喜欢武侠的朋友可能知道小说中也有个卫斯理,他是位冒险家,财力充沛,极富冒险精神,并且有着超强的好奇心,对奇异的事情总有"打破沙锅问到底"的 ...
- C程序编译执行过程
C程序编译执行过程 认识C编译执行过程,是C学习的开端. 简单说C语言从编码编译到执行要经历一下过程: C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码. 连接-- ...
- go 编译:交叉编译&编译执行过程
1. 交叉编译 编译Windows程序和mac程序 GOOS=windows GOARCH-amd64 go build main.go 转自:https://www.cnblogs.com/mafe ...
- c语言编译执行过程
<h4>认识C编译执行过程</h4>认识C编译执行过程,是C学习的开端.简单说C语言从编码编译到执行要经历一下过程: C源代码编译---->形成目标代码,目标代码是在目标 ...
- JAVA - JAVA编译运行过程
Java编译原理 *.java→*.class→机器码 java编译器 (编译) → 虚拟机(解释执行) → 解释器(翻译) → 机器码 1.Java编译过程与c/c++编译过程不同 Java编译程 ...
- Java代码执行过程概述
Java代码经历三个阶段:源代码阶段(Source) -> 类加载阶段(ClassLoader) -> 运行时阶段(Runtime) 首先我们来理清一下Java代码整个执行过程, 让我们对 ...
- C#在.NET编译执行过程
1..NET语言的编译器接受源代码文件,并生成名为程序集的输出文件. 程序集要么是可执行的,要么是DLL 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言 程序集包含如下信息: 程序的CI ...
随机推荐
- Arcgis100.4 加载天地图不显示--备注一哈
Arcgis100.4 默认添加了请求referer 值,天地图会拒绝请求,替换为http://map.tianditu.gov.cn/ 可正常显示.(arcgis 降级到100.1也可正常显示) R ...
- DockerFile理解与应用
1.DockerFile是什么? DockerFile是用来构建Docker镜像的构建文件,一般分为四部分:基础镜像信息.维护者信息.镜像操作指令和容器启动时执行指令,'#' 为 Dockerfile ...
- 第15.42节、PyQt输入部件:QFontComboBox、QLineEdit、QTextEdit、QPlainText功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 输入部件量比较多,且功能很丰富,但除了用于编写编辑器.浏览器 ...
- PyQt(Python+Qt)学习随笔:QHeaderView.ResizeMode取值及含义
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 关于ResizeMode的使用请参考<PyQt(Python+Qt)学习随笔:QTableWi ...
- 课堂练习之疫情APP
title: 课堂练习之疫情查询APP date: 2020-03-17 20:08:51 tags: 在之前的体温记录APP上改进,只写出疫情信息查询页面的代码. 实体类与上篇博客SSM整合中的Ci ...
- Scrum冲刺_Day02
一.团队展示: 1.项目:light_note备忘录 2.队名:删库跑路队 3.团队成员 队员(不分先后) 项目角色 黄敦鸿 后端工程师.测试 黄华 后端工程师.测试 黄骏鹏 后端工程师.测试 黄源钦 ...
- vue优点
低耦合.视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View ...
- 【笔记】「pj复习」深搜——简单剪枝
深搜--简单剪枝 说在最前面: 因为马上要 NOIP2020 了,所以菜鸡开始了复习qwq. pj 组 T1 ,T2 肯定要拿到满分的,然后 T3 , T4 拿部分分, T3 拿部分分最常见的做法就是 ...
- Zabbix自定义模板监控多个url接口
一.脚本配置 1.监控脚本 /etc/zabbix/zabbix_agent2.d/scripts/web_site_code_status.sh #!/bin/bash url_discovery( ...
- centos7 mysql 自动补全
1 yum -y install epel-release #配置erel源 2 yum -y install python-pip 3 pip install mycli #用pip安装 可能会出现 ...