Java学习前,需要掌握的一些基础知识


在学习Java之前,对于一些基础知识的总结:
在学习java之前,第一件事便是搭建Java开发环境。JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。


**JDK、JRE、JVM区别与联系 **

JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

JRE : Java Runtime Enviromental(java运行时环境)。也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。

JVM:Java Virtual Mechinal(JAVA虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 的主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。

下图很好的表面了JDK,JRE,JVM三者间的关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRWfWFKs-1573010209142)(https://img-blog.csdn.net/20170630161542808?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVoZWhlMTIxMzg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]


安装JDK时为什么有两个JRE

安装JDK后,安装目录中出现两个版本的JRE文件,其中之一在JDK外部,一个在JDK内部,这是所谓的专用JRE和公用JRE;

  • 专用JRE
    专用JRE是给JDK中包含的工具工具提供运行环境;专用JR没有注册表设置,并且完全包含在仅对JDK已知的Java目录位置;
  • 公用JRE
    公用JRE可由其他Java应用程序使用(如浏览器插件或者Swing界面的客户端),并且包含在JDK外部,公共JRE会注册到Windows注册表(位于 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft)中,公共JRE可以使用“添加/删除程序”进行删除,并且还会注册到浏览器;换句话说,公共JRE就是为运行加载到计算机中的JAVA程序来提供运行环境的;

细说JDK目录结构

装好JDK后,我们要先明白JDK里面都包含了写什么东西,主要有什么作用!下图为JDK8的安装目录:
Java学习前,需要掌握的一些基础知识

  1. bin:这是存放java启动命令以及其他开发工具命令(如javac)的,该目录应当保存到PATH变量中。

    • javac : 编译器,将源程序转成字节码
    • jar : 打包工具,将相关的类文件打包成一个文件
    • javadoc : 文档生成器,从源码注释中提取文档
    • jdb : debugger,查错工具
    • java : 运行编译后的java程序(.class后缀的)
    • appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
    • Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
    • Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
    • Jconsole: Java进行系统调试和监控的工具
  2. lib:是JDK工具用到的类库及其他文件。tools.jar就包含了对开发工具的支持功能库;dt.jar就是所谓DesignTime的东西,估计是给JavaBean和IDE用的;jconsole.jar自然是给jconsole工具用的了;htmlconverter.jar是用来把用applet的HTML转成所谓Java Plug-In的,即标签改为。

  3. include:包含C语言头文件,用于编写JNI程序和JVMDI(Debugger Interface)的程序时用到,好像还有JVMTI。

  4. jre:这就是JDK自含JRE的根目录了,这是系统属性java.home所指向的目录。下图为JRE的目录结构:
    Java学习前,需要掌握的一些基础知识

    • jre/bin:包含执行文件和dll等库文件,是JVM需要的,可执行文件和jdk/bin是一样,本目录不需要被PATH所包含。
      • jre/bin/client:包含用Client模式的VM时需要的dll库。
      • jre/bin/server:包含用Server模式的VM时需要的dll库。
    • jre/lib:包含核心代码库(Java平台的core API),如rt.jar是所谓的bootstrap的类库,还有很多其他需要的子目录和资源文件等等。注意这个lib目录和jdk/lib是不一样的。
      • jre/lib/ext:是Extension Class Loader装入jar类库的地方,如localdata.jar包含的是java.text和java.util需要的东西。
      • jre/lib/security:包含JVM安全需要的设置文件,JVM信任的证书也在这里。
      • jre/lib/applets:用于applet需要用到的jar库文件,Applet类通过Applet Class Loader从本地文件系统中预加载,这样为减小大型 Applet 的启动时间提供了一些方式,好像从网上已经下载完成了一样。
      • jre/lib/fonts:字体文件。

不积跬步,无以至千里!!!