`

Java程序的编译与运行

    博客分类:
  • Java
阅读更多

        Java是一种面向对象的语言,是现今世界上最好的语言之一;

        Java源代码的默认编译结果并非是本地机器指令,而是具有平台通用性的字节码,因此Java是一种一次编译,处处运行的语言;Java的源代码编译出来的字节码文件,是在Java虚拟机(jvm)中运行的,虽然不同平台的Java虚拟机的实现机制不尽相同,但是编译出来的字节码却是一样的;因此Java又是一种跨平台的语言, 并且能解决程序的安全性问题、跨平台移植性问题;

       Java技术的核心就是JVM,JVM是由一组规范所定义的抽象计算机,JVM的主要任务就是负责将字节码装载到其内部,解释/编译为对应平台上的机器指令执行;目前市场上主流的虚拟机内部一般都包括编译器和解释器,这样设计的原因,通过解释器和编译器的协同工作,既可以保证程序的响应时间,又可以提高程序的执行性能,并且对编译器的工作压力也降低了一定程度的负载;这样就可以当虚拟机启动的时候,解释器可以首先发挥作用,而不必等待编译器全部编译完成再执行,这样就可以节省好多不必要的编译时间,并且随着程序运行时间的推移,编译器逐渐发挥作用,根据热点探测功能,将有价值的字节码编译为机器指令,以换取更高的程序执行效率;

            知识普及到此结束;接下来我要讲的有三个方面:

      1、Java程序编译和运行的大概讲解

      2、Java程序的编译原理

      3、Java程序的运行

 

 

一、Java程序的编译与运行概述

       我们为了提升写代码的速度,我们每个人都有自己使用的编译器,当我们运行完一个程序后,我们的编译器文件夹中一会显示一个多出来的target(也可能是其他的),这个包下面的目录结构和我们的主程序包的结构是一样的,只不过每一个.java都变成了对应的.class文件;这些文件就是我们开篇提到的源程序编译出来的字节码文件,我理解的编译器的作用就是给程序员代码提示,和编译源代码的作用,当然Java也有自带的编译器;

        大家都知道Java是在JVM上运行的,事实上在JVM上运行的是Java编译过后的字节码文件;上面提到了我们的JVM是一种抽象的计算机,那么JVM的位置是在哪的?JVM又是如何处理多个程序的呢?我的理解是这样的:大多数Java虚拟机的书籍上都说JVM在jre包下面,那我们就可以说是JVM对我们的体现就是一堆代码;当我们运行程序的时候对其进行调用,我们当前运行的程序就会创建一个虚拟机实例,然后进行各种分配;我们都知道虚拟机只有一个,而每一次的代码都要在这同一个虚拟机中进行运行;那虚拟机又是如何处理的呢?我对这一块的想法是这样的,Java是一门面向对象的语言,我们写代码的过程中,当我们需要某一个对象的时候我们会new一个,那么我认为这个思想对虚拟机也是这样的,我们每运行一个完整的Java程序

,我们的虚拟机就会new一个虚拟机实例;虚拟机是没有没有生命周期的,但是这些虚拟机实例是有生命周期的,我们的字节码文件开始运行的时候创建本程序的虚拟机实例,当程序结束的时候,虚拟机实例死亡;

 

二、Java程序字节码的编译原理

         javac 编译器将Java代码编译成一个有效的字节码文件主要经过四个主要步骤:词法解析、语法解析、语义解析、生成字节码;

         ①词法解析:

          将Java源码中的关键字和标示符等内容转换为符合Java语法规范的Taken序列,然后按照指定的顺序规则进行匹配校验,这就是词法解析;Taken序列是一组对应源代码字符集合的单词序列,简单的说,Taken序列就是一个枚举类型,其内部定义了许多符合Java语法规范并与源码字符集合相对应的枚举常量、

          ②语法解析:

           指将词法解析后的Taken序列整合为一课结构化的语法树;
          ③语义解析

           将之前语法解析步骤所产生的语法树扩充的更加完善,后续编译器会使用语义解析后的语法树直接生成字节码;

           ④生成字节码

            调用compile()方法进行编译;compile()方法本身不具备执行编译的能力,而是在运行时调用其他的编译方法最终完成字节码的编译;

 

 

三、Java程序的运行

      Java源码编译过后的有效的字节码文件在jvm中运行(见一); 

      jvm的生命周期

分享到:
评论

相关推荐

    编译和运行java程序的小工具

    这个名为“编译和运行Java程序的小工具”就是为了简化这一过程而设计的。下面将详细解释这款小工具的工作原理以及如何利用它来提升Java开发效率。 首先,Java程序的执行通常需要经过两个主要步骤:编译和运行。编译...

    java教程之java程序编译运行图解(java程序运行)

    ### Java程序编译与运行 Java是一种跨平台的编程语言,其源代码文件后缀为.java。一个Java程序要运行,需要经历编译和运行两个基本步骤。首先,Java源代码会被编译成Java字节码,这是一种中间表示,可以在任何安装...

    java程序的编译及运行实验说明

    其次,学生需要使用 Java 的编译器 javac 将源程序编译为字节码文件。例如,c:>javac example.java 如果源程序的语法正确,将生成与主文件名相同的而扩展名为 .class 的文件,例如,example.class 如果编译出错,...

    java反编译程序

    标题中提到的"java反编译程序"通常指的是如Jad、FernFlower、Procyon等这样的反编译工具。它们能够解析.class文件,并尝试重构出接近原始的Java源代码。虽然反编译的结果可能与原始源代码不完全一致,但依然能提供...

    防止Java程序被反编译

    Java程序的可逆性是其独特性质之一,由于其字节码的结构和设计,使得Java程序相对容易被反编译。反编译工具能够解析Class文件中的方法和变量名,甚至重构出接近源代码的代码,这为保护Java代码的知识产权带来了挑战...

    java编译和运行

    JRE是运行已编译Java程序的必备组件,而JDK则增加了编译器和其他开发工具。 在Java编程中,开发者通常使用`javac`编译器将源代码(.java文件)编译为字节码(.class文件)。例如,如果有一个名为`Hello.java`的...

    Java 编译 运行 一键 批处理

    Java 自动编译运行 批处理程序 以下是自制的Java自动编译+运行批处理程序,请将它加入到Path中 它可以执行的指令有: t Java文件名 [/?][e][r]或[c] [a] 注意:请不要输入文件的扩展名 [/?] 读取本帮助信息 [/...

    Java在线编辑编译运行示例

    3. **运行与调试**:成功编译后的Java程序可以在服务器上运行,返回执行结果。部分在线编辑器还提供了运行控制台,显示程序输出,甚至支持简单的调试功能,如设置断点、单步执行等。 4. **版本控制**:为了便于多...

    java代码快捷编译运行工具

    Java代码快捷编译运行工具是针对初学者设计的一款实用程序,旨在简化Java编程过程中常见的编译和运行步骤。对于刚接触Java编程的开发者来说,通过命令行(CMD)进行源码的javac编译和java运行可能会感到繁琐,而这款...

    Java动态编译Java代码,运行在内存中,并执行

    添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等 * 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并...

    java反编译工具绿色版

    Java程序在执行时,会先由Java编译器将源代码编译成字节码,这些字节码存储在.class文件中。Java虚拟机(JVM)再将字节码解释执行。而反编译就是逆向这个过程,通过特定的工具将字节码还原成接近原始的Java源代码。...

    DOS环境下带有自定义包的java程序的编译与运行

    在DOS环境下编译和运行带有自定义包的Java程序是一项基础但重要的技能,尤其对于初学者来说。本文将详细讲解这个过程,并提供一些关键点和注意事项。 首先,理解Java的包(Package)机制至关重要。包是Java的一种...

    java 动态编译.java文件,动态运行类

    在Java编程中,动态编译和运行类是一项重要的能力,特别是在需要实时更新代码或实现热部署的场景下。本文将深入探讨如何利用Java的API来动态编译.java源文件,并执行编译后的类。 首先,Java的`javac`命令行工具是...

    Java反编译工具用于JAVA程序反编译

    总的来说,“小颖Java源代码反编译专家 V1.4终极版”作为一款强大的Java反编译工具,能够为开发者提供便利,尤其是在需要理解和调试无源代码的Java程序时。然而,使用任何反编译工具都应谨慎,并且始终尊重软件的...

    命令行编译和运行java类

    在日常的软件开发过程中,开发者经常会遇到需要在命令行环境下编译和运行Java程序的情况。本文将详细介绍如何在DOS(Disk Operating System)环境下,通过命令行工具编译和运行Java程序。 #### 创建目录结构 在...

    java反编译工具

    虽然反编译的结果可能与原始的.java文件略有不同,但大部分情况下仍然能理解代码的逻辑和结构。 JAD是另一个知名的Java反编译工具,它提供命令行接口,适合于自动化脚本或者集成到其他工具链中。FernFlower则是一个...

    java程序的编译及运行共6页.pdf.zip

    Java程序的编译和运行过程是学习Java编程的基础,也是理解其工作原理的关键。 一、Java程序的编译 在Java中,源代码文件通常以`.java`为扩展名,这些文件包含了Java类的定义。编译Java程序的步骤如下: 1. **编写...

    Linux下Java程序的编译与调试 (1).pdf

    GCJ编译器可以将Java程序编译成本地机器码,从而提高Java程序的执行速度。 四、使用gdb调试Java程序 在Linux中的GNU调试工具gdb可以用来调试Java程序。使用gdb调试Java程序可以帮助开发者快速定位和解决Java程序中...

    java 动态编译.java文件,动态运行类 _1.3

    通常情况下,Java程序在运行前需要通过`javac`命令将.java源文件编译成.class字节码文件,然后通过`java`命令执行。但在某些场合,我们可能希望在程序运行时动态地编译新的.java文件,以便快速响应代码变动。 Java...

    熟悉java程序的开发

    文件列表中的`试验01`可能代表一个初学者的实践项目或实验,这通常涉及到创建、编译和运行一个简单的Java程序,以理解上述概念。这个实验可能包括创建一个简单的"Hello, World!"程序,以此来体验Java开发的基本流程...

Global site tag (gtag.js) - Google Analytics