Java语言诞生于1995年。其实在1995年之前SUN公司(已被Oracle收购)为了占领只能电子消费产品市场,派James Gosling领导团队开发了一个Oak语言,后来改名为Java。1996年 JDK1.0 诞生。
Java包括三大块:JavaSE(Java标准版);JavaEE(Java企业版);JavaEE(Java微型版)。其中JavaSE是基础。
1. Java中的JDK、JRE、JVM
经常听到Java的几个名词:JDK,JRE,JVM。
1.1 JDK
JDK是Java Development Kit的缩写,即Java开发工具包,里面包含了开发Java程序必备的包,如:java.long、java.util等等。
1.2 JRE
JRE是Java Runtime Environment的缩写,即Java运行时环境,就是Java程序运行时需要这个环境。
1.3 JVM
JVM是Java Virtual Machine的缩写,即Java虚拟机。为了实现跨平台,Java程序是在虚拟机上执行的。
可以看出,从范围上来说,JVM最小,JRE次之,JDK最大。一般情况下,JRE是包括JVM的;而JDK也会自带JRE的(但JRE也可以单独安装)。我们在部署项目的时候,不需要在客户机上安装JDK,只需要安装JRE即可,使得项目可以运行。
2. Java语言特性
简单性
相对而言,例如Java不再支持多继承,C++是支持多继承的。C++有指针,Java中屏蔽了指针的概念。所以相对来说,Java是简单的。Java语言底层是C++实现的,不是C语言。
面向对象
Java是纯面向对象的,更符合人的思维模式。更容易理解。
可移植性
Java程序可以做到一次编译,到处运行。也就是说Java程序可以在Windows操作系统上运行,不做任何修改,同样的程序可以直接放到Linux操作系统上运行。这就被称为Java程序的可移植性,或者叫做跨平台。
Windows操作系统内核和Linux操作系统的内核肯定不同,他们这两个操作系统执行指令的方式也是不一样的。那么Java程序只有一份,而两个系统执行程序的原理不一样,显然Java程序肯定不能和操作系统直接交互。Java团队让Java程序运行在一个虚拟的计算机上,即Java虚拟机,JVM。然后让JVM和操作系统进行交互。不同操作系统有不同版本的JVM,可以认为JVM屏蔽了操作系统的差异。
健壮性
和自动垃圾回收机制有关,自动垃圾回收机制简称GC机制(Garbage Collection)。Java语言运行过程中产生的垃圾是自动回收的,不需要程序员关心。而C/C++则需要手动编程内存开辟和销毁程序。
多线程
安全性
3. Java的加载与执行
Java程序的运行包括两个非常重要的阶段:编译阶段和运行阶段。
3.1 编译阶段
编译阶段的主要任务是检查Java源程序是否符合Java语法,符合Java语法则能够生成正常的字节码文件,不符合Java语法规则则无法生成字节码文件。这个阶段是将.java文件
生成.class
文件。一个类会被生成一个.class
文件。注意,如果一个.java
文件中包含多个class,则会生成多个.class
文件。
平时写的Java代码文件是以.java
结尾,称为源文件;将原文件编译后生成的文件以.class
结尾,称为字节码文件,该文件不是纯粹的二进制文件,这种文件无法在操作系统中直接运行,需要JVM。
.class
文件是最终要执行的文件,所以说编译之后,.java
原文件删除之后并不会影响Java程序的执行,但是一般.java
文件不要删除,因为.class
文件最终执行效果可能不是想要的,这时需要重新修改.java
文件,然后重新编译生成新的.class
文件,再次运行程序。
编译执行结束之后,可以将.class
文件拷贝到其他操作系统中运行(已安装JVM),这就是所说的跨平台。
3.2 运行阶段
在运行过程中,java.exe
命令会启动JVM,JVM会启动类加载器ClassLoader,接着ClassLoader会去硬盘上搜索指定文件(类名.class),找到该文件后,则将字节码文件装载到JVM中,然后JVM将字节码文件解释成二进制数据,操作系统执行二进制数据和底层硬件平台进行交互,从而执行程序。
3.3 指令
和C/C++、Python一样,Java程序可在命令行编译执行。
javac 文件名.java
编译指定的文件,生成对应的
.class
文件。javac命令的用法就是后面跟要编译的文件名(注意有后缀),结束之后生成特定的类名.class
文件。(取决于源文件中有几个类,就生成几个类名.class
文件)。java 类名
运行指定的字节码文件。注意不带后缀
.class
。
除此之外,上述命令还可附加一些参数,如指定文件生成的路径,指定传入参数等等。一般情况下不常用,这里不再介绍。
3.4 安装
略,去官网下载想要的JDK版本,安装即可。注意需要设置环境变量,这样才能将上述的编译运行指令作为全局命令使用。
3.5 补充
前期学习基础知识的时候,尽量使用上述命令在DOS窗口运行,这样可以了解命令的使用以及后续类、包等机制,之后再用成熟的IDE。
右击新建txt文件,修改后缀名为
.java
。编写代码,注意类名和文件名要一致。
在DOS窗口下,切换到源文件所在目录下,运行 编译命令。
注意,因为上述源文件中只有一个HelloWorld类,所以编译之后,只生成了一个
.class
文件,且文件名和类名一致。在
.class
文件所在目录下,运行 运行命令。
4. 备注
参考 B站《动力节点》。