java、javac、JDK、JRE
- DOS常用命令:
打开运行窗口 | Win+R |
退出DOS窗口 | exit |
清屏 | cls |
DOS窗口下查看目录 | dir(相当于Linux下的ls命令) |
回到上一级路径 | cd … |
直接回到根路径 | cd \ |
切换盘符 | c:回车、d:回车 … |
- Java三大块:
JavaSE | Java标准版 |
JavaEE | Java企业版 |
JavaME | Java微型版 |
- Java特性:开源、免费、跨平台、纯面向对象
简单性 | 不支持多继承(C++支持)、无指针。Java底层是C++实现的。 |
面向对象 | 纯面向对象。 |
可移植性 | 因为有JVM,所以可以跨平台Java程序可以做到一次编译,到处运行。Java程序可以在Windows操作系统运行,不做任何修改,同样的Java程序可以直接放到Linux操作系统运行。 JVM有Windows版本和Linux版本缺点:麻烦,运行 java 程序必须先有 JVM |
多线程 | 完美支持多线程并发 |
健壮性 | 自动垃圾回收机制(GC),不易导致内存溢出。C 或 C++ 使用不当容易导致内存溢出 |
安全性 | java 语言可以编写病毒,但很难让用户中毒,只会让 java 程序猿中毒,所以很少有编写 java 病毒脚本 |
- JDK和JRE:
JDK(Java Development Kit) | Java开发工具箱。JDK包含了JRE、javac、很多java程序调试和分析的工具(jconsole,jvisualvm等)、java程序编写所需的文档和demo例子程序 |
JRE(Java Runtime Environment) | 包含了JVM、java的基础类库。只想运行java程序,只需安装JRE即可;若要编写java程序,要安装JDK |
有单独的 JDK 安装包、JRE 安装包,没有单独的 JVM 安装包 |
javac.exe | javac java的源文件路径 |
java.exe | java 类名 |
- Java是混合型编程语言
首先,我们在运行环境中书写java源代码时,每次保存实际上都是自动运行了javac,而这个javac就是java使用的编译器。但是实际上,javac所做的并不是把源码翻译为机器语言,而是翻译为一种字节码.class文件。实际运行时,把class文件交给jre,再由jre对字节码文件翻译为机器码交给操作系统进行运行
- class文件在翻译为机器码的过程又具体是怎样的呢,这就要看jvm具体是如何实现的了,一般来说是以下形式
- 运行时,字节码文件会由jvm交给jre,再由jre中的解释器逐条翻译为机器码,再给操作系统进行翻译,和普通的解释型一样
- 运行时,引入实时编译器JIT(Just In Time compiler),class文件中的部分字节码会被该种特殊编译器实时编译为机器码,而且还会储存起来,由于对所有的代码进行编译反而会降低速度,它通常只会去编译那些经常使用的部分,比如循环等。JIT实际上是java为了提高自己的速度而引入的一项特征,也正是他的引入,使得java现在的运行速度在某些情况下不会比纯编译型语言慢多少
- rtsj(Real Time Specification for Java),对于javac直接进行二次编译并生成静态的机器码
- 一般来说,字节码文件的解释过程通常是默认同时使用1和2两种方式,在特殊命令下,会执行第三种方式。所以说,在解释型特征的基础上,java为了提升性能还有编译型的特征,因此,被称为两种特征语言的混种
- Java的加载和执行:
编译阶段 | * 检查Java源程序(xxx.java)是否符合语法,符合则使用Javac工具/命令生成正常的字节码文件(xxx.class)。字节码文件中不是纯粹的二进制,这种文件无法在操作系统中直接行。 .class文件运行在JVM上,故在编译结束后,可将class文件拷贝到其他操作系统中运行。 * 一个Java源程序可以生成多个.class文件 * 生成.class文件后,若删除Java源文件,不会影响Java程序的执行,但一般不删除Java源程序。 |
运行阶段 | 输入java 类名(如java A)后,java.exe命令会启动JVM,JVM启动类加载器ClassLoader,ClassLoader会去硬盘上搜索A.class文件,找到该文件就将.class文件装载到JVM中。JVM将A.class文件解释成二进制数据。然后操作系统执行二进制和底层硬件平台进行交互。 |
- Windows操作系统如何搜索硬盘上某个命令的呢?
- 从当前目录下搜索
- 没有搜索到的话,会从环境变量 path 指定的路径中搜索(先去用户变量找,再去系统变量找)
- 还没有搜索到就报错
- 环境变量包括 “系统变量” 和 “用户变量”:
系统变量 | 范围较大,会让计算机所有用户都起作用 |
用户变量 | 范围较小,只作用于当前用户 |
- JAVA_HOME 目前不需要,不配置不影响当前 java 程序运行。后期学到 JavaWEB 时需要安装 Tomcat 服务器,JAVA_HOME 就必须配置了
path | path 环境变量本质上隶属于 Windows,跟 Java 没有关系,只是 Java 用了一下 C:\Windows\System32(用于 javac 和 java 命令) |
classpath | classpath 是一个环境变量(隶属于 Java),给 ClassLoader 指路。没有配置此路径,默认从当前路径 下加载字节码文件,配置了就只能从指定路径下加载 |
- Java程序的种类有:
(a)内嵌于Web文件中,由浏览器来观看的Applet
(b)可独立运行的 Application
(c)服务器端的 Servlets