5分钟了解java的运行原理

小TOT 创建于 2017-02-07

我们来回忆一下如何运行一个java程序。

  1. 首先我们得有一个java文件。比如一个hello world 程序
    public class SeedForWeb{

        public static void main(String[] args){
            System.out.println("hello World!");
        }
    }
  1. 打开命令行输入>javac SeedForWeb.java
  2. 运行>java SeedForWeb
  3. 最后我们成功在屏幕上看到打印出hello World!

这似乎有些简单,一个没有任何编程经验的人。只要百度一篇入门教程非常轻松的得到预期的结果。第一步很简单,打开记事本,将以上代码粘贴进去保存文件即可。第二步,运行jvac....等等,有的人在第二步卡住了,打开命令行怎么也找不到javac命令。其实,java的运行过程并不是我们想象那么简单。下面讲解下java运行需要的条件。 如果读者机器上没有配置好java运行环境的话,按照我上面的步骤。肯定是没法得到正确的结果的。因此java的运行是需要条件的,即我们需要在自己的及其上配置java运行环境,才能够成功的运行java程序。由于只要符合java class 规范的class文件都能够被标准的jvm加载并运行。又由于不同平台都有实现一套java运行时环境,因此就使得java具有了夸平台的特性。值的注意的是java语言是跨平台的,但java运行环境却不是夸平台的

java运行环境呢,java开发环境

jdk,我想大家一定不陌生。jdk是java开发组件的简称。jdk已经包含了一套java运行环境(jre)。当然我们也可以单独安装jre。如果只是为了运行编译好的class文件,完全可以只安装jre,而不安装jdk及其他工具。但需要说明的是,jre值负责运行编译好的class文件。对于java文件无可奈何,因为编译java文件的javac程序不包含在jre中。因此若要完成以上示例,我们需要完整的安装jdk.

如何安装jdk?

详细只需要在百度输入jdk安装,肯定会出现成百上千的文章供大家选择。这里就不详细介绍了。只做大概步骤的讲解。 网上的教大多会这样描述这个过程:

  1. 到java官网下载与自己操作系统适配的jdk安装包。双击,在按照引导程序的提示下,狂点下一步直到完成。
  2. 完成第一步之后,会告诉大家如何去配置java环境变量。
  3. 2步完成之后在cmd命令行中进行java -version、javac命令测试。 过程虽然简单,但是真正理解以上步奏含义的却要需要对java有有一定了解才行。

下面简述以上步骤的意义。 1,按照jdk按照包,实际上是在安装java开发需要用到的文件和工具。如果你在其他电脑上拷贝了一份jdk。可以放到电脑的文件夹下。而不需要完成以上安装操作。两者的区别在于,使用官方的jdk程序会安装java 更新程序,会在java发布新版本时提醒你更新。而采用从别处拷贝文件夹的方式是没有安装java更新程序的。无论怎样,完成第一步安装操作,你一定能够得到这样一个文件夹。他的结构是一定是类似这样的。

--jdk  #jdk根目录
   |-bin #下面是一些可执行文件,也是java开发,运行过程中需要用到的工具
   |-db  #一些说明文件
   |-include # 一些C语言头文件
   |-jre #jdk中包含的jre
   |-lib #java运行时需要用到的一些class文件压缩包

2.配置环境变量

啥叫环境变量?

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

环境变量简单一句来讲就是,配置在操作系统的一些变量信息。如临时文件夹位置。程序通过读取环境变量的临时文件夹信息,就可以选择我们设置的文件夹作为临时文件夹。环境变量可以让在操作系统上运行的程序进行灵活的配置。 按照java环境变量,往往会设置这些信息。

java_home       E:\Program Files\Java\jDK1.7.0
path               %JAVA_HOME%\bin
classpath        .;%JAVA_HOME%\lib\tools.jar

java_home指定了jdk的更目录。 path 的设置使得,可以在cmd命令行执行jdk/bin下面的可执行文件,而不必输入完整的路径信息。完成这样的设置我们就可以方便的运行java,javac等命令了。 classpath设置了,class文件的位置。我们在运行java SeedForWeb时。jvm虚拟机会根据classpath信息,去找到运行时需要的class文件。当然我们也可以不配classpath,java运行库文件/jre/lib,jre/lib/ext/下的jar文件会被自动的搜索。这里说明classpath的作用。

完成上面的配置,我们的java开发环境就完成了。同时也是一套完整的java运行环境。

java程序如何运行

我们都知道,java是跨平台的,这得益于java虚拟机JVM在各个平台都有响应的实现。所有的java代码由jvm解释并在操作系统上运行。编写好java程序后我们首先需要编译,编译需要用到jdk/bin下的javac程序。我们知道在编写java的时候,如果需要用到其他类,需要使用import指令将其他类引入进来。javac在编译的时候会试图在classpath下所有的包去寻找我们引入的的类,若找不到编译会发生错误。编译完成之后使用java命令运行写好的程序,javac程序的入口方法神main(String[] args)方法。java命令会为我们的java程序启动一个jvm,jvm把需要运行的class文件加入到内存中,然后经过一些列的处理,最终运行我们编写的指令。当然java的运行过程远远不止这些细节,想要了解更多,可以搜索jvm相关的知识。