• Java的编译与执行


    1. JAVA的是如何执行的?

    Java最大的特性就是跨平台,所以它的运行平台更复杂些。Java文件经过编译后生成的是一个扩展名为.class的文件,这个文件就是可执行的字节码文件,它不包含当前的硬件信息。当字节码文件被执行时,再由JVM(Java虚拟机)把字节码解释成具体平台上的机器执行执行。

    Java运行系统执行Java应用程序的过程包括三个步骤:代码装入、代码验证、代码执行。如下图

    1. 代码的装入是由类装配器完成,它主要负责装入程序运行时所需要的全部代码,包括程序运行中调用到的其他类。当类装配器装入一个类后,该类被放在自己的命名空间中,除了通过符号引用其他类之外,该类不能影响其他类所在的命名空间。当装入了运行程序所需要的所有类后,运行系统就能确定整个可执行程序的内存布局。
    2. 被装入的代码由字节码验证器进行安全检查,以确保字节代码不存在违反访问权限、不规范的数据类型和非法调用等问题。
    3. 通过校验之后,代码就可以运行了。JAVA的字节码运行方式有两种:
      解释执行方式:通过“解释器”,将字节码翻译成机器码,然后由“运行执行器”将机器码送往硬件执行。整个执行过程是一边翻译一边执行,称为解释执行。
      即时编译方式:通过“代码生成器”,先一次性地将所有字节码翻译成适用于特定计算机系统的机器码,然后送往硬件执行。对程序运行速度要求高时,一般采用这种方式。

    2. JAVA的编译和执行命令

    JDK安装完毕后,在安装路径下有这么几个文件夹:

    • bin:存放编程所要用的开发工具,包括编译器、解释执行程序、小应用程序浏览器、调试器、文档生成器、反编译等。
    • demo:存放演示程序,开发者可以从中学习如何使用JAVA的类库;
    • include:存放本地文件(Native Means);
    • jre:Java运行环境的根目录,存放JVM所需要的各种文件;
    • lib:存放库文件;
    • sample:类似demo文件件,存放用于学习的源代码,多数与网络有关;

    编译命令javac

    javac命令在bin目录,格式如下:

    javac [-选项] filename.java ...

    其中filename.java是要编译的源文件,必要参数,[-选项]为可选项,可以通过命令行敲入javac回车能看到很多选项说明。

    [-选项]中有一项"-classpath <路径>",很重要,它的含义是在编译中要用到的.class文件路径,路径可以有多个用";"号分隔,和环境变量设置类似,如编译文件HelloWorld.java文件,首先在命令行进入bin目录,编译格式如下:

    javac -classpath D:\Java\jdk1.7.0_05\lib D:\mytemp\java\HelloWorld.java

    编译成功,不显示任何信息,因为JAVA遵循“没有消息便是好消息”的原则。在HelloWorld.java目录下生成了HelloWorld.class字节码文件。

    解释执行命令java

    java命令也在bin目录,它是将编译好的class加载到内存,然后调用JVM来执行它,它的格式有两种:

    java [-选项] class [参数...]
    java [-选项] -jar jarfile [参数...]

    执行class时不用带扩展名。

    在命令行敲入java回车也能看到很多选项说明,其中也有"-classpath <路径>",它的含义是执行时要用到的.class文件路径。如:

    java -classpath . HelloWorld

    3. 使用环境变量

    环境变量是包含于系统及当前登录用户的环境信息字符串,一些程序在执行时使用这些信息来确定何处放置或搜索文件。和JDK有关的环境变量有两个:path和classpath。

    • path用于何处搜寻JAVA开发工具,即bin目录下的工具,所有在path环境变量中添加bin路径,如";D:\Java\jdk1.7.0_05\bin";这样在使用javac、java命令时就不必先进入bin目录,可以在任何路径下使用javac和java命令,因为系统会自动去搜索。
    • classpath用于指定执行命令时所需要的.class文件目录,执行javac命令时需要JDK类库,所以给classpath添加lib目录路径,如:";D:\Java\jdk1.7.0_05\lib",当编译成功后会在源文件目录生成字节码.class文件,一般会在.class文件路径下使用解释执行命令java,所以还要在classpath里添加";.",代表当前目录,我当时犯的错就是少配置了当前目录,但如果你不配置就需要在执行java命令时使用classpath参数了。
    出处:http://www.zhaiqianfeng.com    
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    一题多解(六)—— 一个数二进制形式 1 的个数
    心算技巧
    心算技巧
    位运算应用及其注意事项
    位运算应用及其注意事项
    辨异 —— 不同的编程语言(编译型语言、解释型语言、动态语言、静态语言)
    C#POP3协议实现SSL验证登陆GMAIL
    PB学习笔记(一)
    24点计算 --- 庞果
    JAVA网站高并发解决方案
  • 原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4617014.html
Copyright © 2020-2023  润新知