在研究任何一门语言时,无论是面向过程的c,c++(面向过程和面向对象),还是面向对象的.net,java等,弄清语言执行过程至关重要。

 何为语言执行过程?

所谓语言执行过程,指对于任何一门语言,如java,.net语言,从源代码到机器代码的过程。

研究过C#,c++,vb的读者,可能很清楚程序需要经历如下执行过程:

那么java语言的执行过程是怎样的呢?本篇文章将重点来解决该问题。

一  jdk内容概述


当安装好jdk后(本示例jdk版本为11.0.1,不同版本,目录有细微差别,但bin目录包含的exe是一样的),打开bin目录,有两个重要的exe文件:javac.exe(编译器)

和java.exe(.class文件执行器),详细见下图

二  原理分析


java程序执行过程分为两步,下图为流程示意图

第一步:将java源码(.java文件)通过编译器(javac.exe)编译成JVM文件(.class文件)

第二步:将JVM文件通过java.exe执行,输出结果

通过如上分析,我们发现JVM至关重要,其向上屏蔽了操作系统的差异,也正因为JVM的该作用,才使java这门编程语言能够实现跨平台,

其原理大致可描述为如下:

三 例子解析


通过两种方式来检测java程序执行过程,手写方式和编译器方式。

(一)手写java源程序

1.用notepad++手写一个java程序,并保存为JavaRunProcess.java。

Tip:文件名尽量与类名一致

//测试java运行过程
public class JavaRunProcess {
public static void main(String[] args){
System.out.println("Test java Runing Process");
}
}

2.用javac.exe将刚保存的JavaRunProcess.java文件编译成JavaRunProcess.class文件

3.java.exe执行JavaRunProcess.class文件,输出结果

(二)通过Intellij IDEA编写java源程序

如下图,当我们编译好JavaRunProcess源程序后,点击编译,就会产生JavaRunProcess.class文件

四 一些小建议


1.在配置jdk环境变量时,一般需要配置三个参数:JAVA_HOME,PATH和CLASSPATH,在jdk 1.5后,可以不用配置CLASSPATH变量;

2.在配置jdk变量JAVA_HOME和PATH变量时,它们之间应配置为这样关系:JAVA_HOME变量存储jdk安装路径,PATH变量引用JAVA_HOME变量

JAVA_HOME:C:\Program Files\Java\jdk-11.0.1

PATH:%JAVA_HOME%\bin

Tip:这样配置好处是,当在同一台电脑配置多个jdk时,方便jdk的切换(当切换jdk时,只需改变JAVA_HOME变量接口)

3.注意jdk版本问题

五  版权区


  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2098469527@qq.com。
  • 可以转载该博客,但必须著名博客来源。

浅析java程序的执行过程的更多相关文章

  1. [转帖]浅析java程序的执行过程

    浅析java程序的执行过程 转帖来源: https://www.cnblogs.com/wangjiming/p/10315983.html 之前学习过 这一块东西 但是感觉理解的不深刻. copy一 ...

  2. Java程序的执行过程

    Java程序的执行过程 编译器将 Java 源代码编译成字节码class文件 类加载到 JVM 里面后,执行引擎把字节码转为可执行代码 执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行

  3. 一个Java程序的执行过程(转)

    我们手工执行java程序是这样的:  1.在记事本中或者是UE的文本编辑器中,写好源程序:  2.使用javac命令把源程序编译成.class文件:    编译后的.class(类字节码)文件中会包含 ...

  4. Java内存解析 程序的执行过程

    Java内存解析 栈.堆.常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,简单讲解Java内存分配方面的知识. 首先我们先来讲解一下内存中的各个区域. ...

  5. 怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

  6. Python程序的执行过程原理(解释型语言和编译型语言)

    Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的. ...

  7. Python程序的执行过程 解释型语言和编译型语言

    转载地址:http://blog.csdn.net/lujiandong1/article/details/50067655 1. Python是一门解释型语言? 我初学Python时,听到的关于Py ...

  8. 说说Python程序的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  9. java的servlet执行过程是怎么样的?

    java的servlet执行过程是怎么样   答: Servlet执行过程:程序第一次访问,会调用servlet的init()方法初始化(只执行一次),每次程序执行都会根据请求调用doGet()或者d ...

随机推荐

  1. Win 10 Revit 2019 安装过程,亲自踩的一遍坑,有你想要的细节

    首先就是安装吖,不管是管理员权限还是普通权限,都是以下这个问题,跟权限没关系 failed to load .....revitcontentpackui.dll (126) 尝试了网上能查到的各种方 ...

  2. 《JavaScript高级程序设计(第3版)》阅读总结记录第二章之在HTML中使用JavaScript

    本章目录: 2.1 <script> 元素 2.1.1 标签的位置 2.1.2 延迟脚本 2.1.3 异步脚本 2.1.4 在XHTML 中的用法 2.1.5 不推荐使用的语法 2.2 嵌 ...

  3. 转 the best for wcf client

    原文:http://stackoverflow.com/questions/573872/what-is-the-best-workaround-for-the-wcf-client-using-bl ...

  4. 用cmd命令执行SQL脚本

    1.简单说明 osql 为SQL Server的命令 2.要在cmd中执行该命令,一般安装SQL Server后该命令对应的路径会自动添加到系统环境变量中. 3.-S 表示要连接的数据库 -U表示登录 ...

  5. thinkphp mysql查询结果为什么全是string问题

    找到根目录下的thinkphp\library\think\db\Connection.php 文件 // PDO连接参数 protected $params = [ PDO::ATTR_CASE = ...

  6. SSIS - 3.变量

    跟其他变成语言一样,SSIS包中的变量是用来存储临时值的,变量使得整个SSIS包使用起来更加灵活.比如,我们可以遍历一个文件夹来获取文件夹下的所有文件的名称并把名称存储到一个变量中以便进一步处理.在S ...

  7. HTML标签 按功能排序

    按功能类别排列 New : HTML5 中的新标签. 基础 标签 描述 <!DOCTYPE>  定义文档类型. <html> 定义 HTML 文档. <title> ...

  8. kali linux学习笔记(四) : 网络端口大全介绍

    端口大全介绍 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口:丢弃 11端口:在线用户 13端口:时间 17端口:每日引用 18端口:消息发送协议 19端口:字符发 ...

  9. leetcode-比特位计数

    一.题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 ...

  10. [WEB]绕过安全狗与360PHP一句话的编写

    00x01安全狗的确是让人很头痛,尤其是在上传一句话或者写入一句话的时候,会被安全狗拦截从而拿不下shell.当然,安全狗是最简单的一款waf,很容易就进行一个绕过.00x02对于绕过安全狗跟360, ...