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,如果你们学校没有配置邮箱,可以到学信网下载文件,选择官方文件;
  • 如果对功能要求不是很高,也可以使用社区版,比较方便,一些基础的功能都是有的;
  • 如果想使用旗舰版,建议使用正版软件(不过太贵了,一年好几千);也可以去网站上找一些版本(你懂得),但不要进行商业使用。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/850554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】内存泄漏检查及原因分析

目录 为什么要检测内存泄漏?什么是内存泄漏?内存泄漏排查方法1. 使用Zombie Objects2. 静态分析3. 动态分析方法定位修改Leaks界面分析Call Tree的四个选项: 内存泄漏原因分析1. Leaked Memory:应用程序未引用的、不能再次使用或释…

我的编程语言学习记录:一段不断探索的旅程

目录 我的编程语言学习记录:一段不断探索的旅程 1.引言 2.我的编程之旅开始 第一站:Python — 简洁之美 第二站:JavaScript — 网页的魔法 第三站:Java — 企业级的力量 3.学习过程中的挑战与克服 1.理解概念 3.记忆语法…

牛客网刷题 | BC118 N个数之和

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 输入数字N&#xf…

Servlet-01

文章目录 Servlet创建Servlet探究Servlet的生命周期 HttpServletWebServlet注解详解 重定向与请求转发ServletContextServletContext中的接口 HttpServletRequestHttpServletResponse状态码解释Cookie Servlet Q:它能做什么呢? A:我们可以通…

Hadoop3:MapReduce源码解读之Map阶段的数据输入过程整体概览(0)

一、MapReduce中数据流向 二、MapTask并行度 1、原理概览 数据块:Block是HDFS物理上把数据分成一块一块。数据块是HDFS存储数据单位。 数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapRed…

XUbuntu24.04之ch9344(usb转串口芯片)安装驱动(二百四十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

xshell远程无法链接上VM的centos7

1、现象如下, 2.解决办法:查证后发现这个默认的设置为vmnet0 3.参考文章:Xshell连接不上虚拟机centos7_centos7的nat模式可以ping通网络,但是用xshell连不上是什么原因-CSDN博客

从GAN到WGAN(01/2)

从GAN到WGAN 文章目录 一、说明二、Kullback-Leibler 和 Jensen-Shannon 背离三、生成对抗网络 (GAN)四、D 的最优值是多少?五、什么是全局最优?六、损失函数代表什么?七、GAN中的问题 一、说明 生成对抗网络 &#…

Camtasia Studio怎么自动加字幕呢,Camtasia Studio有什么功能呢

在信息化高度发达的今天,视频作为一种直观、生动的信息表达方式,受到了越来越多人的青睐。无论是教育领域的教学视频,还是企业宣传的推广短片,甚至是个人创作的分享作品,都离不开一款优秀的视频编辑软件。Camtasia Stu…

【Python数据分析--pandas学习笔记】Python数据分析库pandas详细学习笔记(内容详细,适合小白入门),数据分析学习笔记

一,pandas教程 1-1 pandas 安装 1-1-1 使用 pip 安装 pandas: pip install pandas安装成功后,我们就可以导入 pandas 包使用: import pandas1-1-2 查看 pandas 版本 >>> import pandas >>> pandas.__version__ # 查看…

数据+AI 打造企业的“金山银山”

今日之世界,数据是生产资料,而人工智能(AI)是生产工具,它们的结合,带来的是业务的增长、新质生产力的提升,就是金山银山。 创新是源动力 凡是到过浙江省安吉县余村的人,应该都会被它…

【云原生_K8S系列】Kubernetes 控制器之 Deployment

在 Kubernetes 中,Deployment 是一种高级控制器,负责管理应用的部署和生命周期。它提供了一种声明性的方式来定义应用的期望状态,并确保实际状态与期望状态保持一致。Deployment 可以自动处理应用的滚动更新、扩展和回滚等任务,是…

Recognize Anything: A Strong Image Tagging Model(RAM模型使用方法)

一、RAM模型介绍 这篇论文介绍了一个名为“Recognize Anything Model”(RAM)的新型基础模型,专用于图像标签识别(图像分类)。这一模型采用大规模图像-文本配对数据进行训练,无需手动注释,能够在…

关于焊点检测(SJ-BIST)模块实现

关于焊点检测(SJ-BIST)模块实现 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于焊点检测(SJ-BIST)模块实现一、引言二、焊点检测功能的实现方法(1) 输入接口&#x…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

【Python机器学习】PCA——特征提取(2)

上一篇写过了用单一最近邻分类器训练后的精度只有0.22. 现在用PCA。想要度量人脸的相似度&#xff0c;计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时&#xff0c;我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们…

iOS Universal Links 配置

前言 Universal Links 通用链接&#xff0c;我的理解就是通过点击这个链接&#xff0c;能够打开应用&#xff0c;还可以根据配置的路径和参数跳转到App内指定页面和传递参数。我们做微信QQ登录分享时会要求配置这个链接。网上有很多文章介绍了如何配置&#xff0c;但是每次随便…

力扣经典面试题-旋转链表(Java)

1.题目描述&#xff1a;给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k …

python数据分析-连云港石化基地2023年用电量分析

接下来对连云港石化基地2023年用电量进行分析&#xff0c;首先导入数据分析基本的包&#xff1a; import pandas as pd import matplotlib.pyplot as plt# Load the data from the provided Excel files file_path1 data1.xlsx file_path2 data2.xlsxdata1 pd.read_excel(f…

设计模式之观察者模式ObserverPattern(十一)

一、概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#xff0c;又被称为发布-订阅 (Publish/Subscribe) 模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会自动收到通知并更新…