JAVA语言的特性总结:
1.在JAVA语言中操控内存的实际上是JVM(JAVA虚拟机)
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
2.所有的JAVA程序都是运行在JAVA虚拟机中的,而JAVA虚拟机执行过程中再去操控内存。
对于C语言,C++语言则是通过指针去操控内存的。(由于C语言和C++语言的这种特性,使得C和C++更灵活,程序员能够直接操控内存,这要求程序员的技术十分精湛,但同时也带来了问题)
而JAVA语言则屏蔽了指针的概念,程序员不能直接操作指针,或者说程序员不能直接操控内存。这样的方式有优点也有缺点。
- 优点:不容易造成内存的泄露
- 缺点:效率相比C++语言可能较低
JAVA语言的底层是C++,所以JVM使用C++语言写好的一个虚拟的电脑。而JVM在JDK安装好的时候,也已经安装成功了。
3.JAVA语言是完全面向对象的,采用面向对象更容易让人理解,让复杂的问题简单化。
4.健壮性:主要是因为JAVA有一种机制——自动回收机制(GC机制)
JAVA语言比起C语言来说更为健壮,因为JAVA不易导致内存的泄露,C和C++则容易导致内存的泄露。
JVM负责调度GC机制,程序员则不需要干涉。
5.JAVA完全/完美支持多线程并发
6.JAVA具有可移植性,跨平台
通俗来讲JAVA编写完成以后,无需任何改动,就可以分别运行在windows,Linux,mac oc操作系统中。
JAVA的这种机制实现了跨平台,那么这种机制的优点和缺点各是什么?
优点:一次编译到处可以运行,可以跨平台
缺点:较为麻烦,需要在每台电脑上配置JVM,即运行JAVA程序必须配备JVM。
7.JDK,JVM,JRE三者之间的关系:
JDK: JAVA开发工具箱
JVM:JAVA虚拟机
JRE: JAVA运行环境
JDK包括JRE,JRE包括JVM
JVM不能独立安装,而JRE和JDK都是可以独立安装的。
JRE和JDK都拥有各自的安装包,而JVM没有自己的安装包。
安装JDK的时候,JRE就已经自动安装了,同时JRE内部的JVM也自动安装了。
安装JRE的时候JVM就自动安装了。
所以如果客户有需求只需要运行JAVA程序,则只需要安装JRE即可,因为JRE所占体积小,安装方便快捷。
Q:为什么安装JDK的时候要自带JRE?.
A:因为JAVA程序员开发完程序以后,要测试这个程序,让这个程序运行起来,需要JRE。所以在JDK安装的时候要自带JRE。
8.对JAVA的加载与执行的理解:
JAVA从编写到最终运行经历了哪些过程?
JAVA程序有着非常重要的两个阶段:
- 编译阶段
- 运行阶段
JAVA程序员直接编写的JAVA代码(普通文本)是无法执行,以及被JVM识别的。JAVA程序员编写的JAVA代码这种普通的文本必须经过一个编译,将这个普通文本变成“字节码”。
JVM能够识别“字节码”,JAVA代码这种普通文本变成字节码的过程被叫做编译。JAVA代码的这种普通文本被称为:JAVA源代码。
Q:编译阶段和运行阶段可以在不同的操作系统上完成吗?
A:完全可以,因为JAVA是跨平台的,可以做到一次编写,到处运行。
Q:JAVA源代码一旦编译完成后,可以删除源代码吗?只留下字节码可以吗?
A:完全可以执行,因为源代码不参与程序的运行过程。参与运行过程的是字节码。但是最好不要删除源代码,因为有可能结果并不是你想要的。当结果不是你想要的时候,你可以重新打开源代码进行修改。
然后重新编译生成新的字节码,再重新执行,这样会有新的执行效果。
Q:字节码是二进制文件吗?
A:不是,因为操作系统可以直接执行二进制文件。
9.JAVA程序从开发到最终运行经历了什么?
第一步:在硬盘的某个位置上建立了一个JAVA文件。其格式为XXXX.JAVA
第二步:用文本编辑器打开JAVA文件,进行符合JAVA语法的源代码的书写并保存
第三步:使用编译器对XXXX.JAVA文件进行编译,如果格式合法,则通过。否则会报错,而报错之后class文件并不会生成,只要编写通过了,才会生成class文件。
ps:一个JAVA源文件是可以生成多个class 文件的。(编译实际上是检查语法问题)
第四步:使用JDK自带的一个工具来执行class文件,后面的工作不需程序员干涉——JVM将字节码文件编译至二进制文件然后传给操作系统,而操作系统负责和硬件的交互。
在以上过程中,需要记住的两个非常重要的命令(之前在随笔一中也有使用)
javac 命令,负责编译。
java 命令,负责运行。
xxx.java文件经过编译后生成了A.class,B.class,C.class等文件。那么我们称A为一个类,B为一个类,C为一个类,其中A,B,C为类的名字。
10.环境变量:
之前在随笔一中笔者直接进行了JAVA程序的编译并没有报错,是因为笔者在之前就已经进行过了环境变量的配置,那么什么是环境变量呢?
环境变量是什么呢?其实我们可以把它理解为【系统的视线范围】,没错,配置进入了环境变量的程序,就等于是进入了系统的视线范围,打开DOS命令窗口后输入程序名,系统就会把在其视线内的
(环境变量内)的程序找出来,如果程序没有配置进入环境的变量的话,那系统自然就找不到。
配置环境变量的步骤,以win10为例。此电脑——属性——高级系统设置——环境变量
注意:环境变量包括”系统变量“和”用户变量“
系统变量:范围比较大,系统变量会让计算机所有的用户都起作用。
用户变量:范围比较小,这个变量只是作用于当前用户。
对于JAVA的JDK所属的环境变量,有一个叫做JAVA_HOME
这个JAVA_HOME目前我们不需要,不配置这个环境变量也不会影响当前环境变量的运行,但是一旦使用tomcat服务器(见javaweb)就必须进行配置了
Q:能不能给类加载器指定一个路径,让类加载器去指定的路径下加载字节码文件?
A:可以的,我们只需要设置一个环境变量叫做classpath