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

news2024/11/27 18:26:45

大家好,我是栗筝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.coloradmin.cn/o/1805102.html

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

相关文章

vs - vs2015编译gtest-v1.12.1

文章目录 vs - vs2015编译gtest-v1.12.1概述点评笔记将工程迁出到本地后,如果已经编译过工程,将工程Revert, Clean up 干净。编译用的CMake, 优先用VS2019自带的打开VS2015X64本地命令行编译gtest工程测试安装自己写个测试工程,看看编译出来的…

《精通ChatGPT:从入门到大师的Prompt指南》第10章:案例分析

第10章:案例分析 10.1 优秀Prompt案例解析 在深入探讨如何精通ChatGPT的使用之前,理解并分析一些优秀的Prompt案例是至关重要的。这不仅有助于更好地掌握Prompt的构建技巧,还能提高与AI交互的效果。在这一节中,我们将详细解析一…

STM32F103C8T6 HAL库 printf重定向 USART1 DMA方式发送数据

前言: 在上一篇文章里,我采用printf重定向为usart1,但是这样发送,对于MPU的负载比较大,所以本篇文章采用DMA方式,解放MPU资源,去做其他的事情,这里仅做为自己的记录。 正文开始&…

LDA初步了解

LDA简析 最明显的特征是能够将若干文档自动编码分类为一定数量的主题(注意:主题的数量需要人为指定)。设定好主题数量之后,运行LDA模型就会得到每个主题下边词语的发布概率以及文档对应的主题概率。 LDA原理 LDA的工作原理 可把…

【刷题篇】分治-归并排序

文章目录 1、排序数组2、交易逆序对的总数3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 class Solution { public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){…

Web学习_sqli-labs_1~10关

less1-GET-Error based - Single quotes - String &#xff08;基于错误的GET单引号字符型注入&#xff09; 我每次操作都会在Hackbar中&#xff0c;代码都在Hackbar框中&#xff0c;可放大看 有题目知道了是字符型注入&#xff0c;我们先判断表格有几列&#xff0c;可以发现…

详细分析Mysql临时变量的基本知识(附Demo)

目录 前言1. 用户变量2. 会话变量 前言 临时变量主要分为用户变量和会话变量 1. 用户变量 用户变量是特定于会话的&#xff0c;在单个会话内可以在多个语句中共享 以 符号开头在 SQL 语句中使用 SET 语句或直接在查询中赋值 声明和赋值 SET var_name value; -- 或者 SE…

如何在恢复出厂设置后从 Android 恢复照片

在某些情况下&#xff0c;您可能会考虑将 Android 设备恢复出厂设置。需要注意的是&#xff0c;恢复出厂设置后&#xff0c;所有设置、用户数据甚至应用程序数据都将被清除。因此&#xff0c;如果您将 Android 设备恢复出厂设置&#xff0c;甚至在里面留下了一些珍贵的照片&…

宝塔面板和 LNMP 环境下反代 HFish 蜜罐平台的正确方法

最近明月在热心站长好友的支持下搭建了安全、简单、有效并永久免费的蜜罐平台 HFish,因为 HFish 默认是以 https://IP:端口 的 Web 链接形式提供访问的,这会暴露蜜罐平台的真实服务器 IP 不说,还非常不便于快速的访问(反正明月是记不住 IP 的),所以就需要给部署好的 HFis…

扫地机器人:卷价格,不如卷技术

扫地机器人内卷的终点是技术和价值&#xff0c;价格只是附属品。 一路上涨的价格&#xff0c;一路下跌的销量 从价格飙升&#xff0c;到重新卷回价格&#xff0c;尴尬的背后是扫地机器人在骨感现实下的无奈抉择。 根据数据显示&#xff0c;2020中国扫地机器人线上市场零售均价…

经典文献阅读之--P2O-Calib(利用点对空间遮挡关系的相机-激光雷达标定)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

C#操作MySQL从入门到精通(19)——插入数据

前言: 谈到数据库,大家最容易脱口而出的就是增删改查,在本篇文章之前一直都是说的各种查询,本文就是说的增删改查中的增,所谓增也就是增加数据的意思,插入数据就是增加数据。 本文测试使用的数据库如下: 1、插入完整行 所谓插入完整行就是一行所有列的数据都是自己插…

hustoj二开

目录 1、路径问题2、开发问题&#xff08;1&#xff09;、mysql&#xff08;2&#xff09;、php 啊啊啊啊&#xff01;&#xff01;&#xff01;难崩&#xff1a; 路径问题搞了好长时间才明白了该项目的路径如何设置的 >_< ,&#xff0c;本文就路径问题&#xff0c;前端页…

Redis 单线程问题 BigKey问题

前言 简单的redis基础类型以及常用操作我们都也已经介绍过了 现在今天我们来谈谈redis对于单线程是需要怎么理解的 以及redis假设遇见大key我们需要怎么去查询和删除呢??? redis单线程 假设有个人现在问你一个问题:redis是单线程的还是多线程的 这个问题本身就不严谨 就像问…

@BeforeAll 和 @AfterAll 必须是 static 的原因

BeforeAll 和 AfterAll 必须是 static 的原因 执行时机&#xff1a; BeforeAll 方法在所有测试方法之前运行。AfterAll 方法在所有测试方法之后运行。 实例化前/后的执行&#xff1a; 因为 BeforeAll 是在所有测试方法执行之前运行的&#xff0c;所以它在任何一个测试实例创建…

微信机器人实现OCR识别录入数据

介绍 采用微信的hook插件&#xff0c;然后解析微信发来的数据图片&#xff0c;通过ocr识别 然后将数据落入execl表格中。同时有权限的人可以导出数据表格即可。 流程图 代码片 文本消息处理流程_robot.py elif msg.type 0x01: # 文本消息# 管理员列表dba_user_list [wxid_…

【C语言】函数递归 (包你懂的)

文章目录 1. 前言2. 递归的定义2.1 递归的思想2.2 递归的限制条件 3. 递归举例3.1 举例1&#xff1a;求n的阶乘3.1.1 分析和代码实现3.1.2 画图演示 3.2 举例2&#xff1a;顺序打印一个整数的每一位3.2.1 分析和代码实现3.2.3 画图演示 3.3 举例3&#xff1a;求第n个斐波那契数…

Unity动画录制工具在运行时录制和保存模型骨骼运动的方法录制动画给其他角色模型使用支持JSON、FBX等格式

如果您正在寻找一种在运行时录制和保存模型骨骼运动的方法&#xff0c;那么此插件是满足您需求的完美解决方案。 实时录制角色运动 将录制到的角色动作转为动画文件 将录制好的动作给新的角色模型使用&#xff0c;完美复制 支持导出FBX格式 操作简单&#xff0c;有按钮界面…

【原创】springboot+mysql村务档案管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

MySQL数据库操作基础(增删查改)

数据库操作基础(增删查改) 1.插入 1.1往数据表中插入一条数据 insert into 表名 values (值,值,值...)此处列出的这些值的数目和类型 要和表的相对应 1.2指定列插入 insert into 表名(列名) values (值);1.3一次插入多个记录 insert into 表名 values (值),(值)...一次插入…