浅析java程序的执行过程

转帖来源:
https://www.cnblogs.com/wangjiming/p/10315983.html

之前学习过 这一块东西  但是感觉理解的不深刻.

copy一下 以后有时间 再仔细看看这一块 JAVA_HOME 还有 PATH的处理

大二时 同学用eclipse 时 教过我.

感觉 这些年 没写代码 的确严重制约自己的进步 

虽然了解了很多 原理 但是都不够深入.

没有复制 最后的版权全 在这里说明一下来源. 
 

在研究任何一门语言时,无论是面向过程的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版本问题

[转帖]浅析java程序的执行过程的更多相关文章

  1. 浅析java程序的执行过程

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

  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. css3属性中background-clip与background-origin的用法释疑

    困惑在哪里? background-clip 与 background-origin是css3中引入的两个跟元素背景相关的属性,它们有相同的可选值,即border.padding.content 三种 ...

  2. yii2 下拉菜单

    model public static function getCatlist(){ $cat = ['0' => '暂无分类']; $res = self::find()->asArra ...

  3. python +百度语音识别+图灵对话

    https://github.com/Dongvdong/python_Smartvoice 上电后,只要周围声音超过 2000,开始录音5S 录音上传百度识别,并返回结果文字输出 继续等待,周围声音 ...

  4. MetaMask/safe-event-emitter

    https://github.com/MetaMask/safe-event-emitter safe-event-emitter An EventEmitter that isolates the ...

  5. 老男孩Python自动化运维视频

    链接:https://pan.baidu.com/s/1VLXJ0RZr39kpSGthkLkgmA 密码私聊我

  6. 纯html页面中js如何获得项目路径

    js,全称javascript,不过虽然是以java开头,不过与java一点关系都没有. js和java有如下区别: (1)js是浏览器端的语言,而java是服务器端的语言. (2)js是动态语言,j ...

  7. QT中子目录调用另一个子目录

    解决办法: 第一:建立一个subdirs项目,子项目管理 第二:添加二个子项目例如:A子项目   B子项目 第三:现在A子项目调用 B子项目 在A子项目中:右键>添加库>内部库(把A添加进 ...

  8. nodeJS之crypto模块公钥加密及解密

    nodeJS之crypto模块公钥加密及解密 NodeJS有以下4个与公钥加密相关的类.1. Cipher: 用于加密数据:2. Decipher: 用于解密数据:3. Sign: 用于生成签名:4. ...

  9. Objective-C 在main函数之前的过程

    main函数是我们所熟知的程序入口,Java.Python.C++等,虽语法各异,但皆是如此.然而,程序真正的起点并非main函数,在此之前,就已经干了很多事情. 1.在main函数打个断点,从调用栈 ...

  10. AS导入一个工程出现Error:please select Android SDK的错误

    导入一个新的工程出现:Error:please select Android SDK 的错误 现象描述:点击运行程序按钮,弹出一个“Edit Configure”的对话框,最下面报:Error:ple ...