Java开发环境
Java特点:语法简单、面向对象、稳定、与平台无关、多线程、动态。
设置环境变量
一般情况下,要运行程序,需要找到运行文件的目录,点击运行。配置环境变量后,在整个系统任何路径下都可以使用命令的方式来运行程序。
这里用 javac java 命令文件来运行和编译相应文件,是因为环境变量设置的是这两个命令文件的所在的文件目录,在控制台输入这些命令,会先在本地目录去寻找,然后去环境变量设置的路径去寻找,最终找到他们并运行。由此看来我们设置的环境变量应该是我们经常所用到的文件所在的文件目录(绝对路径)。
设置方法:
JAVA_HOME : C:\Program Files\Java\jdk1.8.0_91
%JAVA_HOME%\jre\bin == C:\Program Files\Java\jdk1.8.0_91\jre\bin
JDK、JRE、JVM
JDK:Java Development Kit (java开发工具包)
JDK是整个JAVA的核心,包括了Java的运行环境JRE、一堆Java工具 (javac、java、jdb等)和Java基础的类库(即Java API包括rt.jar)。
JRE:Java Runtime Environment(java运行环境)
JDK里面的JRE是JDK自带的为其开发工具提供运行环境的JRE
JDK外面JRE用于为Java程序提供运行环境。
JRE包含JVM和java类库(class文件打包而成的.jar文件)
JVM:Java Virtual Machine(java虚拟机)
JVM是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。
简单来说就是运行java的工具,不同的操作系统,所安装的jvm是不同的。这就是为什么Java是与平台无关的。
如下图所示:
JVM 内存模块:
引用数据类型: 对象存在堆中,在栈中存储的是此对象数据的存储地址
基本数据类型: 直接在栈中存储 数据
堆:所有的对象实例以及数组都要在堆上分配。
栈(虚拟机栈):用于存储局部变量表等,局部变量表存放了编译期可知长度的各种基本数据类型、对象应用。方法执行完毕,自动释放。
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量等。
运行java程序的流程:
- 1.交给java编译器编译java文件((注:在目标文件所在的路径下)对目标文件运行,javac.exe程序),编译成功完自动形成.class字节码文件。
当前文件目录>javac XXX.java
- 2.在jvm上运行java程序(使用字节码解释器java.exe来解释执行字节码文件),不同操作系统上的是jvm是不同的,jvm根据刚才编译完形成的字节码文件经过字节码解释器解释成系统可识别的指令码。这样就实现了跨平台。
主类字节码所在目录(一般默认和源文件在同一个目录)>java XXX
//Java应用程序总是从主类的main方法开始执行的。
//java 命令后面必须是主类的名字(不包括拓展名)
补充:通过环境变量的设置,我们可以直接利用java.exe命令运行java程序。
而且Java运行时系统默认的路径是jre\lib\rt.jar;.; ,rt.jar代表runtime JAR," .;" 表示应用程序可以使用所在当前目录中的无名包类以及当前目录下的子目录中的类。
也就是说在执行完java.exe指令后,会立马去运行rt.jar文件以及同目录和子目录中的文件。我们可以打开看一下rt.jar文件。
可以看到,lang包等其他一些包都在rt.jar文件中。
(lang包下的类不用import语句)
常用指令:
javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。
javap Hello.class
javadoc.exe可以制作源文件类结构的html文档。查看这些文档可以知道源文件中类的组成结构,如类的方法和成员变量。
命令: