java虚拟机(JVM)

java虚拟机

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

其实刚入门java的时候还并不理解这种机制,随着学完JAVA SEJAVA EE的过渡时,才理解到JVM的一些特性。

刚入门java的时候都是从java se学起的

1.2.1 Java语言的三种技术架构
J2EE(Java 2 Platform Enterprise Edition)企业版
是为开发企业环境下的应用程序提供的一套解决方案。 该技术体系中包含的技术如Servlet Jsp等,主要针对于Web应用程序开发。 J2SE(Java 2 Platform Standard Edition)标准版
是为开发普通桌面和商务应用程序提供的解决方案。 该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。 比如Java版的扫雷。 J2ME(Java 2 Platform Micro Edition)小型版
是为开发电子消费产品和嵌入式设备提供的解决方案。 该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。
Java5.0版本后,更名为JAVAEE JAVASE JAVAME

Java语言的特点:跨平台性

什么是跨平台性?
通过Java语言编写的应用程序在不同的系统平台上都可 以运行。

原理是什么?
只要在需要运行java应用程序的操作系统上, 先安装一个Java虚拟机(JVM Java Virtual Machine)即可 。
由JVM来负责Java程序在该系统中的运行。

Java语言的特点:跨平台性(图解)
在这里插入图片描述
因为有了JVM,所以同一个Java程序在三个不同的操作系统中都 可以执行。这样就实现了 Java程序的跨平台性。也称为Java具有 良好的可移植性。

什么是JRE,JDK?
JRE(Java Runtime Environment Java运行环境) 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类 库等,如果想要运行一个开发好的 Java程序,计算机中只需要安装JRE 即可。 JDK(Java Development Kit Java开发工具包) JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包 括了 JRE。所以安装了JDK,就不用在单独安装JRE了。 其中的开发工具:编译工具(javac.exe) ,打包工具(jar.exe)等
简单而言:使用JDK开发完成的java程序,交给JRE去运行。

安装JDK

傻瓜式安装,下一步即可。

建议:安装路径不要有中文或者特殊符号 如空格等。

当提示安装JRE时,可以选择不安装。

配置环境变量path(1)
在dos命令行中敲入javac,出现错误提示。
在这里插入图片描述

错误原理:当前执行的程序在当前目录下如果不存在,windows系统 会在系统中已有的一个名为path的环境变量指定的目录中查找。如果 还没有找到,就出现以上的错误提示。

所以进入到

jdk安装路径\bin目录下,执行javac。看到javac参数提示
信息。
在这里插入图片描述
配置环境变量path(2)

每次执行java的工具都要进入到bin目录下,是非常麻烦的。

可不可以在任何目录下都可以执行java的工具呢?

根据windows系统在查找可执行程序的原理, 可以将 java工具所在路径定义到path环境变量 中,让系统帮我们去找运行执行的程序。
配置环境变量path(3)

我的电脑–属性–高级–环境变量

编辑path环境变量,在变量值开始处加上java工具所 在目录,后面用 “ ; ”和其他值分隔开即可。

打开DOS命令行,任意目录下敲入javac。

如果出现javac 的参数信息,配置成功。

这种配置方式,一劳永逸。

配置环境变量path(4)

临时配置方式:通过dos命令中set命令完成
• set :用于查看本机的所有环境变量的信息。
• set 变量名:查看具体一个环境变量的值。
• set 变量名=:清空一个环境变量的值。 • set 变量名=具体值:给指定变量定义具体值。

想要在原有环境变量值基础上添加新值呢?
• 首先,通过%变量名%操作符获取到原有环境变量的值。
• 然后加上新值后在定义给该变量名即可
• 举例:给path环境变量加入新值
• set path=新值;%path%

注意:这种配置方式只在当前dos窗口有效。窗口关闭,配置消失。

配置技巧

为了不因为jdk的目录或者目录名称的改变,而不断更改path的 值,而导致对 path变量值的误操作,可以通过以下技巧完成。
• 新创建一个环境变量JAVA_HOME 记录住jdk的目录。
• 在path中通过%%动态的获取JAVA_HOME的值即可。
• JAVA_HOME=F:\jdk1.6.0_01
• path=%JAVA_HOME%\bin;%path%
• %path%:动态获取path环境变量的值。
• %JAVA_HOME%:动态获取名称为JAVA_HOME环境变量的值。

Java程序开发体验–Hello World

  1. 将Java代码编写到扩展名为.java的文件中。 2. 通过javac命令对该java文件进行编译。 3. 通过java命令对生成的class文件进行运行。 具体操作流程可参阅:Hello World流程图.doc
    在这里插入图片描述

Java程序开发体验–编写

步骤一:编写
• 选择最简单的编辑器记事本。
• 敲入代码 class Demo {}
• 将文件保存成Demo.java,这个文件是存放java代 码的文件,称为源文件。

Java程序开发体验–编译

步骤二:编译
• 有了java源文件,将其编译成JVM可以识别的文件。
• 在该源文件目录下,通过javac编译工具对Demo.java文 件进行编译。
• 如果程序没有错误,没有任何提示,但在当前目录下会 出现一个 Demo.class文件,该文件称为字节码文件,也 是可以执行的 java的程序。
Java程序开发体验–运行

步骤三:运行 • 有了可执行的java程序(Demo.class字节码文件) • 通过运行工具java.exe对字节码文件进行执行。 • 出现提示:缺少一个名称为main的方法。
在这里插入图片描述
因为一个程序的执行需要一个起始点或者入口,所以在Demo类中的加 入public static void main(String[] args){} • 对修改后的Demo.java源文件需要重新编译,生成新的class文件后,在 进行执行。 • 发现没有编译失败,但也没有任何效果,因为并没有告诉JVM要帮我们 做什么事情,也就是没有可以具体执行的语句。 • 想要和JVM来个互动,只要在main方法中加入一句 • System.out.println(“hello java”);在重新编译,运行即可。

配置classpath(1)

既然class文件(字节码文件)是java的运行文件,可不可以实现, 在任意目录下都可以执行某一目录下的 class文件呢?

根据path环境变量的原理,可以定义一个名为classpath环境变 量,将要运行的 class文件所在目录定义在该变量中。

例:set classpath=c:\

classpath变量值是java类文件的目录

path变量是windows程序文件的目录

配置classpath(2)

JVM查找类文件的顺序: • 如果没有配置classpath环境变量,JVM只在当前目录下查找要运 行的类文件。 • 如果配置了classpath环境,JVM会先在classpath环境变量值的 目录中查找要运行的类文件。 • 值的结尾处如果加上分号,那么JVM在classpath目录下没有 找到要指定的类文件,会在当前目录下在查找一次。 • 值的结尾出如果没有分号,那么JVM在classpath目录下没有 找到要指定的类文件,不会在当前目录下查找,即使当前目 录下有,也不会运行。 • 建议:配置classpath环境变量时,值的结尾处不要加分 号,如果需要访问当前目录可以用 “.”表示。

创建问题及解决方法

在这里插入图片描述
源文件名不存在或者写错,或者当前路径错误。
在这里插入图片描述
类文件名写错,或者类文件不在当前路径下,或者不再classpath指 定路径下。

创建问题及解决方法
在这里插入图片描述
编译失败,注意错误出现的行数,在到源代码中指定位置排错。

JVM还得从安装JDK开始,JDK(java Development Kit)中包括 jre(java runtime environment),jre中又包含JVM,所以在Windows上安装JDK时,就会代表着JVM也会一起安装在Windows上。
java之所以跨平台性,就是因为多了个JVM机制,JVM是底层的工具。JVM在不同平台上(主要指操作系统)都是不一样的,所以在其他的操作系统上JVM都是充当其可移植性的底层工具而已。
因为有了JVM,所以同一个java程序在三个不同的操作系统(Windows Linux MacOS)中都可以执行。这样就实行了java程序的跨平台性。也称为java具有良好的可移植性。
在这里插入图片描述

posted @ 2019-09-05 15:24  兮动人  阅读(41)  评论(0编辑  收藏  举报