Java简介和编译过程理解

Java简介和编译过程理解 一、java简介 在Java开发的世界中,我们会经常听到JDK、JRE和JVM这三个词。它们都与Java的运行环境以及Java程序的编译和运行有关,它们之间也存在一些关联性和区别 JDK 全称Java Development Kit,即Java开发工具包。顾名思义,JDK

Java简介和编译过程理解

一、java简介

在Java开发的世界中,我们会经常听到JDK、JRE和JVM这三个词。它们都与Java的运行环境以及Java程序的编译和运行有关,它们之间也存在一些关联性和区别

  1. JDK
    全称Java Development Kit,即Java开发工具包。顾名思义,JDK是用于Java开发的一套工具包,里面包含了Java的编译器javac、Java程序打包工具jar、Java程序运行环境JRE、文档生成工具javadoc以及很多用于开发的工具,如调试工具jdb等。
  2. JRE
    全称Java Runtime Environment,即Java运行环境。JRE是运行Java程序所需的环境,包括JVM以及Java类库等。JRE是Java程序运行的实施场所,同时也提供了运行Java程序所必需的库文件。
  3. JVM
    全称Java Virtual Machine,即Java虚拟机。JVM是Java运行环境的核心,它负责Java程序的运行。JVM是一个虚拟的计算机,它接收到字节码(编译后的Java程序),然后解释或编译执行。
    三者关系:

JDK是最大的,它包含JRE,而JRE又包含JVM。
JDK是为了满足Java开发人员的需要而创建的,其中包含开发工具和JRE。因此,如果你需要编写Java程序,那么你需要JDK。
JRE是为了运行那些已经编写好的Java程序而创建的,JRE中包含有JVM和Java类库,但是并不包含其他开发工具,因此,如果你只需要运行Java程序,那么你只需要JRE就可以了。
JVM就像一个桥梁,它负责将我们编写的Java代码(人类可以理解的)转化为机器可以运行的机器代码。

二、java编译过程

  • 首先得编写一个Java的源文件,源文件编写好了就能交给CPU来执行吗?
  • 还不行啊,他得经过一个编译的步骤,也就是用那个javac程序把它编译成字节码文件
  • 这个字节码文件呢,再经过一个叫 java 程序加载到 jvm 虚拟机,
  • jvm 虚拟机其实还做了一件很重要的事,就是把字节码文件给解释成机器码
  • 机器码就是最为底层的代码了,CPU就可以识别和运行它

整个流程是先把源文件变成字节码,再把字节码变成机器码,最终由CPU执行。
为什么我们不直接把Java 源码翻译成机器代码,而是多出了字节码这么一个中间环节呢?C++语言就没有这个中间环节。

1.C++ 的翻译过程

c++编译流程.png

举个例子,在windows平台下编写好了c++源代码,可以把它经编译器编译为windows平台的机器码,但是这个机器码呢,只能用在windows平台。想拿到Linux平台下用,用不了。必须在 Linux 平台下,重新编译成Linux机器码。看看这样的缺点

  1. 项目规模大了,源码编译也挺耗时间,在 windows 下编译一遍比如用了 20 分钟,测试通过了,将来要部署到 Linux 平台,又得编译一遍,再花 20 分钟... 时间都花在编译上了
  2. 程序员还得熟悉两个平台,做不到开发与部署环境相分离

2.Java 的翻译过程

java编译流程.png
Java做的就是加入了字节码这个中间环节,不管是在Linux下的编译还是在windows下的编译,生成的字节码是所有平台都通用的,你在windows平台生成的字节码在Linux平台一样用,反之亦然。可以看到

  1. 编译只需要一次,编译时间被节省了
  2. 程序员只需要工作在自己熟悉的平台上就可以了,做到了开发与部署环境的分离
    这就是 java 所宣称的 write once run anywhere,编写一次,到处运行。

但是解释阶段问题就有:

  • 需要在每个平台上安装 jvm 虚拟机,负责把字节码解释为机器码
  • 另外因为引入了把字节码解释为机器码的步骤,性能上会有一定损失,当然 jvm 为了保证性能,内部会做很多优化,这等我们讲到 jvm 时,会有更深入的认识

所以我们就会注重jvm的调优

三、查阅Javadoc

javadoc 就是 java documentation 的缩写,我们下载的 jdk 中已经自带了,无需额外再下载。那怎么查阅 javadoc 呢,如果大家用的是 idea,那么可以通过一些快捷键来查阅java文档

  • 比如想看看类的文档,这时先按 Ctrl + N 查找类,假设我想看 Math 类的文档,输入要查阅的类名 Math,回车,可以跳转到这个类
  • 接下来我想看看方法的文档怎么办呢,按一下 ctrl + f12,列出当前类的所有方法,绿色表示可以使用方法,橙色带锁的,表示是该类一种特殊的私有方法,不能直接使用。找感兴趣的方法时,如果你懂一些英文单词,那么会有一定优势,例如你想找一个平方根方法,它对应的英文是 sqrt,这时敲入这几个字母,就会定位到方法,同样可以用翻译查看该方法的功能
  • 可以查到它的作用:返回一个数的平方根,这是方法名,查看后面括号内可以得知,需要一个参数,代表要求平方根的那个数字,是一个double 小数,方法名称前还有个 double 表示它的结果类型也是一个 double 小数
  • Math 中的方法大部分都是 static 方法,也就是配合类名使用的方法,之前也说过,用法为 类名.方法名(参数)

在平时写代码时,如果忘记了某个方法的作用,可以光标定位到该方法,按 Ctrl + Q 进行查阅,效果是类似的

LICENSED UNDER CC BY-NC-SA 4.0
Comment