当前位置: 首页 > news >正文

Java 环境配置 -- Java 语言的安装、配置、编译与运行

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 002 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。当然,我也会在必要的时候进行相关技术深度的技术解读,相信即使是拥有多年 Java 开发经验的从业者和大佬们也会有所收获并找到乐趣。

上一篇的内容中我们介绍了 Java 语言的概述,明白了它是什么,有什么特点,并且有着怎样的过去和会有怎样的未来。而在这篇文章中,首先,我们将会先聊一聊 Java 的体系、环境、和版本,因为如果是刚入门的小伙伴,没有去特意了解的话,确实会存在相关的困惑(现在网上大多数文章对相关内容的介绍已经过时了);然后,我们会进行真正的开始,即 Java 语言的安装、配置、编译与运行;在最后,我们再了解一下,当下最为流行的 Java 开发 IDE 工具 – IntelliJ IDEA!

最后在前言的末尾我补充一下,如果这篇文章,对大家有所帮助或收获一定的乐趣和想法,那么非常欢迎大家能够,点赞、评论、收藏、订阅。这些也将是我持续更新的最大动力。


文章目录

      • 1、Java 体系&环境
        • 1.1、Java 三大体系
        • 1.2、Java 三大环境
        • 1.3、Java 两大版本
      • 2、Java安装&配置
        • 2.1、Java下载
        • 2.2、Java 安装
        • 2.3、Java 配置
        • 2.4、Java 验证
      • 3、Java 编译&运行
        • 3.1、Java 的运行过程
        • 3.2、Java 编译/解释型语言
        • 3.3、Java 编译执行 Demo
      • 4、Java 开发工具:IDEA
        • 4.1、IDEA 简介
        • 4.2、IDEA 下载和安装


1、Java 体系&环境

1.1、Java 三大体系

1999 年 Sun 公司根据应用的领域不同把 Java 技术划归为三个平台,当时分别称为 J2SE、J2EE 和 J2SE,后改名为 Java SE、Java EE 和 Java ME。近些年来,对于新接触 Java 这门语言的同学们来说,Java 三大体系平台,总是会在入门的时候提及到,但是在后续的应用使用时却没发现需要根据不同场景进行细分,这是为什么呢?

首先,这里我们简单先回顾一下 Java 三大体系的概念:

  • Java SE(Java Platform,Standard Edition):Java 平台标准版,它是 JavaEE 和 JavaME 的基础,提供了 Java 的核心功能。它包含了 Java 语言基础库、Java 虚拟机 JVM 和一些基础的工具,主要用于开发桌面应用和商用应用;
  • Java EE(Java Platform,Enterprise Edition):Java 平台企业版,建立在 Java SE 的基础之上,是支持企业级应用的 Java 平台,提供了一套完整的企业级应用解决方案,包括 Web 应用服务器、EJB、Servlet、JSP 等;
  • Java ME(Java Platform,Micro Edition):Java 平台微型版,是一个针对移动设备和嵌入式设备的 Java 平台。Java ME 包含了一套轻量级的 API 和一个专为小型设备优化的 JVM,主要用于开发手机、电视、工业控制等嵌入式设备的应用。

然而现在基本上 Java EE 和 Java ME 官方都基本上没有更新了。只有 Java SE 还在每半年更新一个大版本。基本上现在我们说的 Java,JavaSDK,Java 开发工具包其实都指的就是 Java SE。

image-20240523165342867

那为什 么Java EE 和J ava ME 现在基本上都没了呢?

  • Java ME 没了很好理解,时代的弃子,因为自从有了智能手机和 Android 的出现,世上再无 ME。因为智能手机的内存已经可以和 PC 相当了,所以不需要一个精简版的 Java ME 了。而是一个更需要支持智能手机的开发工具包,所以 Google 就魔改了 Java。

  • Java EE 没了是因为 Java EE 提供的东西太有限了,服务器开发需要大量软件库的支持。例如各种类和对象的管理,高性能网络 IO的支持,各种中间件的支持,这些 Java EE 提供的东西都太弱了,或者说不如 Java SE + 其他开源框架的方式。

    所以大家都没有直接再用 Java EE 了,而是用 Java SE 加上一些开源的框架和第三方库来做服务器端的开发,例如 Spring,MyBatis 啥的。当然 Java EE 的规范没有被摒弃掉,可以说当前主流的 Web 应用框架能力是在 Java EE 基础上提供的。

所以 Java 刚入门的同学其实只需要学好 Java SE 就行了,EE 和 ME 面试和工作时基本都用不到了,只进行基本的了解即可。

1.2、Java 三大环境

了解了 Java 三大体系之后,我们再来了解一下 Java 三大环境。

JDK(Java Development Kit)、JRE(Java Runtime Environment)和 JVM(Java Virtual Machine)都是 Java 语言生态中的重要组件,它们之间的关系密不可分。

这三个组件的定义:

  • JDK(Java Development Kit):JDK 是 Java 开发工具包,是用于开发 Java 应用程序的开发环境。它包括了Java 编译器(javac)、Java 运行时环境(JRE)以及其他一些用于开发、调试和测试的工具,我们本篇接下来进行的安装就是 JDK;
  • JRE(Java Runtime Environment):JRE 是 Java 运行时环境,它包含了运行 Java 程序所需要的环境。也就是说,只要你的机器上安装了 JRE,就可以运行编译后的 Java 字节码程序;
  • JVM(Java Virtual Machine):JVM 是 Java 虚拟机,它是一种可以执行 Java 字节码的虚拟计算机。JVM 是 JRE 的一部分,它负责解释和执行 Java 字节码,使得 Java 程序可以在任何支持 JVM 的平台上运行。

接下来,我们来看看它们之间的关系:

JDK、JRE 和 JVM 的关系可以理解为:JDK 包含了 JRE 和开发工具,JRE 包含了 JVM 和运行 Java 程序所需的环境,而 JVM 则是运行 Java 程序的核心部分。三者共同构成了完整的Java开发与运行环境。

image-20240523205415543

  • JDK 包含了 JRE,也就是说,如果你安装了 JDK,那么你也已经安装了 JRE。同时,JDK 也包含了编译 Java 程序的工具,例如编译器和调试器(JDK = JRE + 开发工具集)。

  • JRE 则包含了 JVM,也就是说,只要你的机器上安装了 JRE,那么你也已经安装了 JVM。JVM 是 JRE 的核心部分,它使得 Java 程序可以在任何平台上运行(JRE = Jvm + JavaSE 标准类库)。

1.3、Java 两大版本

在 2006 年 11 月 13 日的 JavaOne 大会上,Sun 公司宣布计划将开源 Java,并建立了 Open JDK 社区,随后 Sun 在 GPL 下陆续发布了 Java 类库的源代码(除了一些被第三方授权给 Sun 且 Sun 无法根据 GPL 重新授权的受限部分之外);

此时的 JDK 即为 OpenJDK。OpenJDK 是 Java SE 的开源实现,他由 Sun 和 Java 社区提供支持,2009 年 Oracle 收购了 Sun 公司,自此 Java 的维护方之一的 Sun 也变成了 Oracle。

OpenJDK 和 OracleJDK 是 Java 开发和运行环境的两种实现,它们的主要区别在于许可证和一些特性:

  1. OpenJDK:OpenJDK 是 Java SE 的开源实现,由 Sun 公司和 Java 社区提供支持。OpenJDK 的许可证是 GPL v2,这意味着你可以自由地使用和修改源代码,但如果你分发修改后的版本,必须以同样的许可证开源;

  2. OracleJDK:OracleJDK 是 Oracle 公司基于 OpenJDK 源代码构建的 JDK,它的许可证是 Oracle 二进制代码许可协议。这意味着你可以免费使用 OracleJDK,但如果你想用于商业用途,可能需要付费。

技术上,OracleJDK 和 OpenJDK 没有重大的差异,但 OracleJDK 提供了一些额外的性能优化和商业特性。此外,Oracle 对 OracleJDK 提供商业支持,而 OpenJDK 则主要依赖社区支持。

本质上,OracleJDK 也是 OpenJDK 的发行版之一目前使用最多的 Java builds 仍旧是 OracleJDK,但其后分别还有 AdoptOpenJDK、Oracle’s OpenJDK、Amazon Corretto、Azul Zulu,以及国内的 Alibaba Dragonwell、Huawei bisheng JDK、Tencent Kona 等;

如果你是开发开源项目或者个人使用,OpenJDK 是一个很好的选择。如果你需要商业支持或者 OracleJDK 的特定特性,那么你可能需要选择 OracleJDK。


2、Java安装&配置

2.1、Java下载

Java 官方下载地址:https://www.oracle.com/java/technologies/downloads/

点击上方链接即可跳转到官网下载界面,根据需要选择对应配置进行下载!

image-20230401170409163

2.2、Java 安装

对于 Windows 和 MacOS 来说,Java 的安装步骤很简单,我们可以选择对应的安装程序(.exe / .dmg)然后根据步骤来进行安装:

  • Mac 系统的默认安装路径为下述地址:
 ~/Library/Java/JavaVirtualMachines/
  • Windows 在安装时注意指定好安装路径即可
  • 对于 Linux 系统来说,下载好二进制安装包后,解压到指定位置即可,例如:
tar -zxvf jdk-8u251-linux-x64.tar.gz
2.3、Java 配置

对于 Linux 和 MacOS 来说,配置 $JAVA_HOME 环境变量,找到以下三个配置文件中的任意一个:

~/.bash_profile
~/.bashrc
~/.zshrc

添加下面这行代码,之后使用 source 更新即可:

# 以 Java8 举例,其中 "JAVA_HOME=" 后面是 Java JDK 的安装地址
export JAVA_HOME=/Users/liziheng/Library/Java/JavaVirtualMachines/corretto-1.8.0_332
export PATH=$JAVA_HOME/bin:$PATH:.
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib

对于 windows 系统:

  1. 打开系统设置,点击高级系统设置,打开环境变量以后点击系统变量的新建:新建 JAVA_HOME 变量(单词大写,符合是英文),如果是用默认安装路径可以直接复制使用;

  2. 找到系统变量中的 Path 变量,选中然后点击编辑,然后点击新建,这里都一样,可以直接复制使用:

%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
  1. ClassPath 环境变量:点击系统变量新建然后在新建系统变量框里面输入下面内容即可
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
2.4、Java 验证

打开终端,输入 java -version,查看安装版本:

> java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment Corretto-1.8.0_332 (1.8.0_332_b08)
OpenJDK 64-Bit Server VM Corretto-1.8.0_332 (build 25.302-b08, mixed mode)

3、Java 编译&运行

3.1、Java 的运行过程

Java 程序的运行必须经过编写、编译和运行 3 个步骤。

  1. 编写:在 Java 开发环境中编写程序代码,形成后缀名为 .java 的 Java 源文件。
  2. 编译:使用 Java 编译器(javac 命令)对源文件进行编译,如果源代码中没有语法错误,编译器会生成后缀名为 .class 的字节码文件。这个字节码文件是跨平台的,可以在任何安装了 Java 运行环境(JRE)的机器上运行。
  3. 运行:使用 Java 解释器(java 命令)对字节码文件进行解释运行,将字节码翻译成机器代码并执行,最后显示运行结果。

这个过程中,Java 的跨平台特性得到了充分体现,即"一次编写,到处运行"。

Java 程序运行流程如图所示:

image-20230401174120624

Java 字节码和 Java 虚拟机(JVM)是实现 Java 跨平台特性的关键。

Java 字节码:Java 字节码是一种中间代码,是 Java 源文件经过 Java 编译器编译后生成的。它是一种二进制文件,既不依赖于具体的硬件环境,也不依赖于具体的操作系统环境。Java 字节码需要由 Java 解释器进行解释执行,因此 Java 是一种在编译基础上进行解释运行的语言。

Java 虚拟机(JVM):JVM 是运行 Java 程序的软件环境,Java 解释器是 JVM 的一部分。JVM 负责将 Java 字节码翻译成具体硬件环境和操作系统平台下的机器代码并执行。这样,Java 程序就可以在任何安装了 JVM 的机器上运行,无需考虑当前的硬件平台和操作系统环境,也无需考虑字节码文件是在何种平台上生成的。

JVM 把这种不同软、硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植。JVM 是 Java 平台架构的基础,Java 的跨平台特性正是通过在 JVM 中运行 Java 程序实现的。

3.2、Java 编译/解释型语言

Java 是编译型语言还是解释性语言?Java 语言既有编译型语言的特性,也有解释型语言的特性,它结合了两者的优点。

首先,编译型语言的特性:Java 程序需要先被编译成字节码(.class 文件),这个过程是编译过程。编译可以在编程阶段发现和修复一部分错误,提高程序的运行效率。

其次,解释型语言的特性:Java 字节码并不是可以直接运行的机器代码,它需要由 JVM 进行解释执行。这个过程使得 Java 程序具有了跨平台的能力,即 “一次编写,到处运行”。

因此,Java 既是编译型语言,也是解释型语言。但由于其跨平台的特性,通常我们更倾向于将 Java 归类为解释型语言。

3.3、Java 编译执行 Demo

我们可以通过一个简单的 “Hello World” Demo 程序来了解 Java 的编译和执行过程。

首先,我们编写一个简单的 Java 程序:

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}
}

将以上代码保存为 HelloWorld.java 文件。

然后,我们使用 Java 编译器 javac 对源文件进行编译:

javac HelloWorld.java

编译成功后,会在当前目录下生成一个 HelloWorld.class 文件,这就是我们的字节码文件。

最后,我们使用 Java 解释器 java 来运行这个字节码文件:

java HelloWorld

运行成功后,控制台会输出 “Hello, World!”,这就是我们的程序运行结果。

以上就是 Java 程序的编译和执行过程,通过这个过程,我们可以看到 Java 程序是如何从源代码变为可以运行的程序的。


4、Java 开发工具:IDEA

4.1、IDEA 简介

IDEA 全称 IntelliJ IDEA,是 Java 编程语言的集成开发环境。IntelliJ 在业界被公认为最好的 Java 开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE 支持、各类版本工具(GIT、SVN 等)、JUnit、CVS整合、代码分析、 创新的 GUI 设计等方面的功能可以说是超常的。

IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持 HTML,CSS,PHP,MySQL,Python 等。免费版只支持 Java、Kotlin 等少数语言

4.2、IDEA 下载和安装

下面就带大家来安装一下 IDEA 旗舰版。

进入官网,点击下载::https://www.jetbrains.com//idea/download/

版本选择参考:

  • 如果你是学生或者高校老师,可以免费申请使用旗舰版,不过这个需要验证你的身份,大概7天左右,那我们可以直接使用旗舰版,因为他30天免费使用,等到认证成功,我们可以免费使用;
  • 学生如何申请免费IDEA,如果你们学校没有配置邮箱,可以到学信网下载文件,选择官方文件;
  • 如果对功能要求不是很高,也可以使用社区版,比较方便,一些基础的功能都是有的;
  • 如果想使用旗舰版,建议使用正版软件(不过太贵了,一年好几千);也可以去网站上找一些版本(你懂得),但不要进行商业使用。

下载后我们双击安装包,按照提示安装即可!

相关文章:

  • 如何使用Python中的列表解析(list comprehension)进行高效列表操作
  • 美银美林:看好铜价涨到12000美元,这类铜矿企业弹性更大
  • 鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】
  • LeetCode|2331. Evaluate Boolean Binary Tree
  • Linux基础 (十五):TCP 协议特点和UDP协议
  • 06016传感器原理与应用202207
  • R语言数据探索和分析23-公共物品问卷分析
  • 物联网设计竞赛_8_Jetson Orin Nano安装pytorch与torchvision
  • 申请医疗设备注册变更时,需要补充考虑网络安全的情况有哪些?
  • locale本地化库学习
  • Linux应用 sqlite3编程
  • 如何学习自动化测试?(附教程)
  • 【iOS】内存泄漏检查及原因分析
  • 学习分享-注册中心Naocs的优雅上下线
  • axios设置 responseType为 “stream“流式获取后端数据
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【个人向】《HTTP图解》阅后小结
  • 2017年终总结、随想
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • canvas 五子棋游戏
  • dva中组件的懒加载
  • Flannel解读
  • HTTP中的ETag在移动客户端的应用
  • javascript 总结(常用工具类的封装)
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • LintCode 31. partitionArray 数组划分
  • Mac转Windows的拯救指南
  • orm2 中文文档 3.1 模型属性
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • scala基础语法(二)
  • SpriteKit 技巧之添加背景图片
  • Theano - 导数
  • Travix是如何部署应用程序到Kubernetes上的
  • vue.js框架原理浅析
  • WinRAR存在严重的安全漏洞影响5亿用户
  • Yeoman_Bower_Grunt
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 代理模式
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 那些年我们用过的显示性能指标
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 小李飞刀:SQL题目刷起来!
  • 一起参Ember.js讨论、问答社区。
  • 在Mac OS X上安装 Ruby运行环境
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #if #elif #endif
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #QT(智能家居界面-界面切换)
  • #WEB前端(HTML属性)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测