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操作系统中。

    

javacv 按时长切分视频 javacv mat_JVM

 

            JAVA的这种机制实现了跨平台,那么这种机制的优点和缺点各是什么?

    优点:一次编译到处可以运行,可以跨平台

    缺点:较为麻烦,需要在每台电脑上配置JVM,即运行JAVA程序必须配备JVM。

 

  7.JDK,JVM,JRE三者之间的关系:

    JDK: JAVA开发工具箱

    JVM:JAVA虚拟机

    JRE:   JAVA运行环境

 

    JDK包括JRE,JRE包括JVM

               

javacv 按时长切分视频 javacv mat_JVM_02

 

    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