Java环境配置——JDK的选择、下载、安装与配置环境变量

  • JDK的简介以及版本选择、下载与安装
    • JDK历史版本(除最新版以外的版本)
    • java平台移植性的原因
    • 解释执行和编译执行
    • JDK的Linux版本
      • ubantu
    • JDK的Windows版本
    • 安装JDK后核对压缩包里的文件(此部分为回忆版)
    • 环境变量的配置
      • Windows配置环境变量
      • Linux配置环境变量
        • 本台服务器全机生效
        • 本台服务器对应用户下的生效
    • 静态链接库和动态链接库

JDK的简介以及版本选择、下载与安装

安装Eclipse需要提前安装JDK,否则会在刚开始安装程序运行之后,就弹出对话框,提示尚未安装JDK。此处给出JDK官网的下载地址。我在视频中还见到了自称JAVA的中文官方网站,待确认。

JDK历史版本(除最新版以外的版本)

如果需要找JDK之前的所有版本,点击前面给出的“JDK官网链接后,进入如下页面。点击下图红框,进入的页面下滑,即可见到下图二的JDK各个版本”。

如果要选择历史版本,比如JDK1.8,在前面给出的JDK官网链接页面中下滑,下滑至如下图所示。第一红框上方即为最新的JDK版本,下滑后到JDK1.8

JDK:Java Development Kit,又名Java Platform(这个是我看官网上给的,详见下面的第二张截图),即Java 开发工具包,是针对Java的免费软件开发工具包,是面向开发人员使用的SDK,为Java程序的开发提供支持,Java开发的核心。JDK提供了Java的开发环境和运行环境,包括JRE 和一些好用的小工具,例如:javac.exe,java.exe,jar.exe 等。需要配置环境变量。
 
SDK:Software Development Kit,即软件开发工具包。是(为特定的软件包、软件框架、硬件平台、操作系统等)建立应用软件时所需要用的开发工具的集合,通常从目标系统开发者那里获得。自认可以理解为一个已经实现好的现成函数功能库。
 
JRE:Java Runtime Environment,即Java 运行时环境,是运行JAVA程序所必须的环境的集合,面向Java程序的使用者。主要包含两个部分,Java虚拟机(JVM)的标准实现和 Java核心类库它相对于 jvm 来说,多出来的是一部分的 Java 核心类库。

java平台移植性的原因

JVM:Java Virtual Machine,即Java虚拟机。它只认识 xxx.class 类型的文件(即文件中的字节码指令),并能够按class 文件中的字节码指令调用操作系统提供的 API 完成相关操作。针对不同的系统有不同的 jvm 实现——有 Linux 版本的 jvm 实现,也有 Windows 版本的 jvm 实现——但是同一段代码在编译后的字节码是一样的。比如,在 Java层面,我们调用系统声音设备的代码是唯一的,和哪个操作系统无关,编译生成的字节码也是唯一的。但是这一段字节码在不同的 jvm 实现上会映射到不同的操作系统API上调用,从而实现Java可跨平台运行——即换环境,但是不必再编译一次——“一次编译,到处运行”的效果。
 
(自认)Java之所以具有平台移植性,是因为Java程序运行在JVM中,而与底层操作系统的交互,全部交由JVM实现——即Java跨平台靠的是JVM能跨平台。
 
—————————————————————————————————————————————————————
:以下与C++间的比较,是我在网上看到的,是否正确待确认
C++底层直接调用操作系统;而java是在操作系统之上加了一层JVM,所以一般来说C++性能更好。与操作系统的强锁定(即C++直接调用操作系统),使C++在不同操作系统或者硬件平台运行时,都要对程序进行改进和调整(即需要重新编译,C++代码是否还用改呢?),而Java在这种情况下就不用再重新编译了。当然JVM在让Java获得跨平台的可移植性的同时,也造成了Java在性能上一定程度的下降。但是,随着Java版本的不断更新——技术的提高、数据结构算法的应用,JVM的性能也一直在升级,普通应用场景下,已经和C++性能相关不大。
 
—————————————————————————————————————————————————————

解释执行和编译执行

解释执行:类似于“同声翻译”。解释一句后就提交计算机执行一句,并不形成目标程序。解释执行的优势在于不用等待,但效率较低,不生成可独立执行的可执行文件——下次执行时,还是需要逐行解释——应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序,适合于人通过终端设备与计算机会话。
编译执行:由编译程序将目标代码一次性编译成目标(代码的)程序,再由机器运行,因此目标程序可以脱离其语言环境独立执行,而且下次运行时(若无代码修改、不更换所执行的环境)无需重新编译。编译执行的优势在于实际运行中效率更高,但程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件.obj才能执行。只有目标文件而没有源代码时,修改很不方便。
java程序是解释执行or java混合执行补。
下面四段为博客所见,待验证。
①Java有多个编译器。编译器归谁(是在JVM里的?)。
②(mixed模式下)Java代码经过javac编译成class文件(字节码),
class(字节码)文件经过JVM编译成机器码后,进行解释执行(解释执行),在这同时,若计算机资源充足,对于热点代码,JIT(JustInTime)编译器会在解释运行的同时将其编译为机器码执行(编译运行)。
③主流JVM的实现都是混合形式的,以Oracle JDK提供的HotSpot虚拟机为例【Oracle Hotspot JVM 中有两个JIT compiler 一个是C1,对应的模式是client; 一个是C2,对应的模式是server。client一般在我们进行开发的时候使用,server模式一般在生产环境使用。
JVM有不同的运行模式,mixed模式是默认模式(用-Xmixed开启),int模式是解释模式(即全部采用解释执行,用-Xint开启),comp模式(用-Xcomp开启)是编译模式,JVM关闭解释模式,采用编译模式运行】(那就是说还有别的JDK?),它提供了两种编译模式:解释执行 和 即时编译(JIT,Just-In-Time)。即时编译就是我们前面所说的编译执行。即时编译存在的意义在于它是提高程序性能的重要手段之一。根据“二八定律”(即:百分之二十的代码占据百分之八十的系统资源),对于大部分不常用的代码,我们采用解释执行的方式,用到就去逐条解释运行;对于一些仅占据小部分的热点代码(可认为是反复执行的重要代码),则采用编译执行,将之翻译为机器码高效执行,提高程序的效率。在计算机资源充足的情况,字节码的解释执行和编译执行可以同时进行,编译好的机器码会在下次调用该方法时启动,替换原本的解释执行。还有博客说“它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行”。
④Java将源码编译为.class文件(字节码文件),JVM解释执行.class文件。
 
注:机器码是CPU直接读取运行的机器指令,运行速度非常快,但是不具有可读性。计算机所能识别的语言只有机器语言,即由0和1构成的代码。
字节码是Java语言中的一种中间状态的二进制代码,需要直译器转译后才可能成功的成为机器码(Java的编译过程就是将源程序编译为字节码文件——.class文件的过程)。

JDK的Linux版本

Linux系统的JDK又根据硬件架构分为了两种架构,如下图所示——Arm 64×64,具体可通过指令uname -a来查询自己计算机的架构。

Linux系统需要注意的是,JDK有两种版本,我看网上博客的解释是对应两种硬件架构,待确认。通过指令uname -a来查询自己计算机的架构。比如下图所示的情况,则应选择Linux Arm 64,详见此博客。

而如果指令后的结果是Linux ubuntu20 5.4.0-107-generic #121-Ubuntu SMP Thu Mar 24 16:04:27 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux,则应选择Linux ×64

ubantu

选择×64版本

JDK的Windows版本

打开官网首页,如下图所示,在左侧导航栏处根据自己的需要找到相应的JDK即可。

JDK版本的选择
首先,确定下版本的叫法。看简书上的说法,下面的版本应该叫1.12。

其次,我在网上看到一篇博客(博客链接)介绍了Java版本的选取,文中将Java的所有版本分为两种:CPU、PSU,并在文中提到 “ Oracle 强烈建议所有 Java SE 用户升级到相应版本系列的最新 CPU 版本。大多数用户应当选择 CPU 版本。”这个分法是否正确,待确认。
这里简单总结一下该博客的内容:
PSU(补丁集更新):包含相应 CPU 中的所有修复以及其他非重要修复。
CPU( 重要补丁更新):包含安全漏洞修复和重要漏洞修复。后续 CPU 版本将包含当前 PSU 的所有修复。 版本号采用奇数编号(即 7u71、7u65 — 有关 Java SE 版本编号方式的详细信息,详细信息链接)。

最后,我看了一些关于介绍Java各版本区别的博客和百度百科,JDK版本区别这是其中一篇,只给出了1.5到1.10版本,大家可以参考。

安装JDK后核对压缩包里的文件(此部分为回忆版)

.pack文件要解压成.jar文件:unpack200 文件名.pack 文件名.jar

环境变量的配置

  • JAVA_HOME(操作系统寻找JDK的路径):JDK安装的根目录,比如C:\Users\administrator\Desktop\jdk-19.0.1
  • PATH(操作系统使用指令时,寻找对应指令用到的路径):JDK安装根目录下的bin文件夹下,比如%JAVA_HOME%\bin
  • CLASSPATH(Java编译后存放class文件的路径,即运行字节码文件时会查找的路径,自认待确认): .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
  • JRE_HOME(有些软件会用到JRE_HOME,比如Tomcat7.0版本,如果没有设置此环境变量,就会闪退):在安装JDK19时,发现安装后里面没有JRE,从网上看到有博客使用jlink.exe --module-path jmods --add-modules java.desktop --output jre指令,会在当前路径下生成一个jre
cd C:\Users\lu\Desktop\ljh\jdk-19.0.1\bin
C:\Users\lu\Desktop\ljh\jdk-19.0.1\bin>

安装JDK后,之所以需要配置环境变量,是因为

  • 用户变量新建JAVA_HOME(名称是以Apache JMeter中的官方安装要求为准),值为JDK的安装根目录;此篇博客
  • 系统变量中的path变量设置后,在命令提示行中可以直接输入Java命令,而不必输入JDK的完整路径。path变量需要将JDK的bin目录的安装路径存入即可。系统变量配置path如下图所示,官网解释如下:

    详情见JDK官网解释。
  • 有的博客会要求设置Classpath,Classpath在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。

classpath的作用补入此篇博客。

事实上JDK 5.0默认就会到当前工作目录(上面的.设置),以及JDK的lib目录(这里假设是C:\Program Files\Java\jdk1.5.0_06\lib)中寻找Java程序。所以如果Java程序是在这两个目录中,则不必设置Classpath变量也可以找得到,将来如果Java程序不是放置在这两个目录时,则可以按上述设置Classpath。

这里给大家展示一下JDK的bin文件夹下的内容:都是一些dll文件

Windows配置环境变量

Linux配置环境变量

本台服务器全机生效

配置环境变量后,source /etc/profile使配置生效。

本台服务器对应用户下的生效

/home/该用户的用户名/
配置多个环境变量的方法补入这篇博客可以吗。

静态链接库和动态链接库

dll文件(Dynamic Linkable Library):即动态链接库文件,简称“库文件”,又称“应用程序拓展”,是软件文件类型。是一个包含可由多个程序同时使用的代码和数据的库,提供了一些可以直接拿来用的变量、函数或类。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。
在Windows中,许多应用程序并不是一个完整的可执行文件,而是被分割成一些相对独立的dll文件。当我们执行某一个程序时,相应的DLL文件就会被调用。自认即dll文件是一种只能等待被调用,无法向.exe文件那样可以自己执行的文件。
好处:通过dll文件,程序可以实现模块化——由相对独立的组件组成。
①提高程序加载速度,可以根据需要,只将需要的模块加载,而不必全部加载。例如,一个计帐程序可以按模块来销售。可以在运行时才将各个模块加载到主程序中——模块是彼此独立的,所以程序的加载速度更快;模块只在相应的功能被请求时才加载,而不必在最一开始就将所有模块不管是否需要就全部加载,节省了加载的工作量。
②数据统一管理,更新更方便。可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,你可能具有一个工资计算程序,而税率每年都会更改。当这些更改被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。
 
经历了“无库-静态链接库-动态链接库”这个过程的发展。静态链接库与动态链接库都是共享代码的方式。
静态链接库:.lib文件,库中的代码最后需要链接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

动态链接库:动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
 
共享dll文件:一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

Java环境配置——JDK的选择、下载、安装与配置环境变量相关推荐

  1. jdk eclipse SDK下载安装及配置教程

    原文地址https://blog.csdn.net/dr_neo/article/details/49870587 最新鲜最详细的Android SDK下载安装及配置教程 最近Neo突发神经,想要将学 ...

  2. Dev-C++下载安装和配置

    Dev-C++下载安装和配置 文章目录 Dev-C++下载安装和配置 一.Dev-C++下载 二.Dev-C++安装 三.Dev-C++配置 一.Dev-C++下载 下载网站:https://bloo ...

  3. java 第一弹:最新Oracle JDK 下载安装与配置环境变量

    java 第一弹:最新Oracle JDK 下载安装与配置环境变量 1.下载网站甲骨文官网https://www.oracle.com/java/technologies/javase-downloa ...

  4. Java学习——JDK的下载安装和配置

    Java学习--JDK的下载安装和配置 一.JDK.JRE和JVM(JDK包含JRE,JRE包含JVM) 1.JDK(Java Development Kit) Java开发工具包,用于开发Java程 ...

  5. java ee 下载 安装配置_JavaEE下载安装及配置.doc

    JavaEE下载安装及配置 Apache Tomcat下载安装及配置 下载 Tomcat6.X最新版本官网下载地址:/tomcat/tomcat-6/v6.0.35/bin/ 右键迅雷下载即可. 安装 ...

  6. Day001--Scala中的下载安装配置及下载安装集成开发环境IDEA

    老生常谈,我们学习一门语言之初都会先将其所依赖的环境和包安装好,Scala也不例外,只是Scala不能像Java一样,有一个专门来写它的IDE(eclipse),但我们可以在IDEA(集成开发环境)上 ...

  7. Windows 10下载安装openjdk及环境变量配置(以openjdk 8为例)

    Windows 10下载安装openjdk及环境变量配置(以openjdk 8为例) Windows 10下载安装openjdk及环境变量配置 下载地址 https://www.azul.com/do ...

  8. PHP开发环境MySQL下载安装及配置流程

    PHP开发环境&MySQL下载安装及配置流程 因工作需要,从0开始学PHP,前几天看完视频教程后开始搞开发环境,到今天才好.这里把安装配置流程梳理一下分享出来. 一.概述 要搭建一个开发环境无 ...

  9. win10,64位环境下curl7下载安装和配置详细图文教程(亲测有效)

    win10,64位环境下curl7下载安装和配置教程 一.前期准备: (1)windows10,64位: (2)python3.8 二.下载: 三.安装: 四.环境变量配置: (1)新建 ==CURL ...

最新文章

  1. Web开发兼容性系列文章(一):不同设备浏览器的userAgent值大全
  2. python self 序列_python中序列化对象
  3. 数博会重磅活动:第二届大数据科学与工程国际会议详细日程
  4. ViTAEv2世界第一:6亿参数模型,ImageNet Real 91.2%最高准确率,更大模型、更多任务、更高效率...
  5. MATLAB一维数组的创建与元素提取
  6. stm32可以移植linux系统吗,如何在STM32上移植Linux?超详细的实操经验分享
  7. ios 给网页传值_ios常见的页面传值方式
  8. Python中Selenium设置无界面访问
  9. 【软件操作】WinRAR 实现安装更新 操作
  10. 喝酒神器摇骰子小程序源码分享以及搭建效果图
  11. 40 岁的时候,我转行成为一名前端开发者!
  12. 新生代公链再攻「不可能三角」
  13. 传鸿蒙操作系统掌舵人王成录已从华为离职
  14. 联发科(MTK)MT6765 核心板 安卓主板
  15. Verilog中repeat的用法
  16. Java函数式编程(Lambda表达式、Stream流用法)
  17. XML简介及两种C#读取方式
  18. matlab计算公式中的累加,Matlab系列教程之数值计算_求和(积)_求累加(积)
  19. 丢失修改与数据库的一致性
  20. 用html语言制作个人网页,使用HTML制作个人网页.ppt

热门文章

  1. 如何用计算机思维解决问题
  2. 穷举法解锁华为手机bootloader
  3. 在 Unity 中保存和载入游戏
  4. 关于win10键盘无法打出@和#的问题
  5. SDN软件定义网络 学习笔记(3)--北向接口、东西向接口
  6. bvh动作 舞蹈_Unity3D使用BVH动作文件驱动模型
  7. 代码示例:使用C#加密和解密Excel文件
  8. selenium 爬抖音
  9. Jamie求职记--北邮信通小硕--技术类
  10. 程序员工作经验谈之商贸平台