操作系统:macOS 12.7.3

1. 为什么没安装配置过Java,在终端中输入Java也有反应?
在 macOS 上,即使你没有显式设置 `JAVA_HOME` 环境变量,系统仍然可以识别和使用 Java。

macOS 预装了一些 Java 运行时环境(JRE)或开发工具包(JDK)。它们位于系统级别的目录中,可以在终端中直接访问。

默认情况下,macOS 使用一个默认的 Java 安装路径。在较新的 macOS 版本中,它通常位于 `/Library/Java/JavaVirtualMachines` 目录下。

因此,即使你没有显式设置 `JAVA_HOME` 环境变量,系统仍然可以定位到默认的 Java 安装路径,并使用其中的 Java 版本。

要验证系统默认的 Java 安装路径,可以在终端中运行以下命令:

/usr/libexec/java_home

该命令将返回系统当前默认的 Java 安装路径。

请注意,虽然系统可以自动识别并使用默认的 Java 安装,但在某些情况下,显式设置 `JAVA_HOME` 环境变量仍然是有用的,特别是当你需要使用特定版本的 Java 或自定义的 Java 安装时。

1.1 如何切换Java版本
要切换 macOS 系统的默认 Java 版本,你可以按照以下步骤进行操作:

1. 打开终端应用程序(Terminal)。

2. 运行以下命令来列出系统上已安装的 Java 版本及其标识符:

/usr/libexec/java_home -V

   这将显示已安装的 Java 版本列表,每个版本都有一个标识符(类似于 `1.8.0_212`)。

3. 选择你想要设置为默认的 Java 版本的标识符。

4. 运行以下命令来设置所选 Java 版本为系统默认版本:

export JAVA_HOME=`/usr/libexec/java_home -v <Java版本标识符>`

   将 `<Java版本标识符>` 替换为你选择的 Java 版本的实际标识符。例如:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_212`

   这将临时设置 `JAVA_HOME` 环境变量为所选的 Java 版本。

5. 如果你希望将此设置永久应用到系统中,可以将上述命令添加到你的 shell 配置文件中。对于大多数 macOS 用户,可以编辑 `~/.bash_profile` 文件(如果不存在则创建),然后将命令添加到文件末尾,保存并关闭文件。

echo 'export JAVA_HOME=`/usr/libexec/java_home -v <Java版本标识符>`' >> ~/.bash_profile

   请确保将 `<Java版本标识符>` 替换为你选择的 Java 版本的实际标识符。

6. 重启终端或运行以下命令以使新的环境设置生效:

source ~/.bash_profile

此时,你已经成功切换 macOS 系统的默认 Java 版本。你可以通过运行以下命令来验证 `JAVA_HOME` 环境变量是否正确设置为所选的 Java 版本:

echo $JAVA_HOME

输出应该显示你选择的 Java 版本的安装路径。

1.2 bash_profile、bashrc、profile是什么?
在 macOS 上,与 `~/.bash_profile` 对应的还有一个同类型的文件叫 `~/.bashrc`。这是用户级别的 Bash shell 配置文件。

`~/.bash_profile` 文件在登录时执行一次,用于设置用户特定的环境变量和执行其他初始化命令。而 `~/.bashrc` 文件在每次打开新的终端窗口时执行,用于配置用户的 Bash shell。

当用户登录时,Bash 将首先执行 `~/.bash_profile` 文件。如果该文件存在,则不会执行 `~/.bashrc` 文件。然而,当用户在已登录的会话中打开新的终端窗口时,Bash 将会执行 `~/.bashrc` 文件。

你可以使用 `~/.bashrc` 文件来设置用户级别的环境变量、别名、函数以及其他 Bash 相关的配置。如果你希望在每次打开终端时自动加载 `~/.bash_profile` 文件,可以将以下行添加到 `~/.bashrc` 文件中:

if [ -f ~/.bash_profile ]; then
    source ~/.bash_profile
fi

这将检查是否存在 `~/.bash_profile` 文件,并在存在时加载它。这样,每次打开新的终端窗口时,都会自动加载 `~/.bash_profile` 文件,而无需手动运行 `source ~/.bash_profile` 命令。

请注意,`~/.bash_profile` 和 `~/.bashrc` 是针对每个用户的个人配置文件。如果你希望配置适用于所有用户的环境变量,可以修改系统级别的配置文件,如 `/etc/profile` 或 `/etc/bashrc`。这些文件需要管理员权限才能进行修改。

1.3 如果我并不在终端中编写Java那么设置终端的Java环境是不是没啥用
如果您并不在终端中编写Java代码或者使用终端来执行Java程序,那么在终端中设置Java环境变量可能确实没有太大的意义。

终端中设置Java环境变量的目的是为了让终端会话中的Java相关命令和程序能够正确地找到和使用Java的执行环境。这对于在终端中编写和执行Java代码以及运行Java相关工具和命令非常有用。

然而,如果您在其他环境中进行Java开发,例如使用集成开发环境(IDE)或编辑器,那么终端中的Java环境设置对您的开发工作可能没有直接的影响。

值得注意的是,一些应用程序和工具可能会依赖终端中的Java环境变量设置来确定系统中的Java版本和路径。如果这些应用程序或工具需要使用Java,但找不到Java环境,可能会导致它们无法正常工作。

综上所述,如果您不在终端中编写Java代码或者使用终端来执行Java程序,您可以不太关注设置终端的Java环境变量。然而,如果您使用其他工具或应用程序,这些程序依赖于终端中的Java环境变量,那么确保正确设置Java环境变量可能是有意义的。