Skip to content

Java 入门

Java 将带你进入新领域。它从一开始就以友好的语法、面向对象、内存管理和最棒的跨平台可抑制性来吸引程序员。写一次就可以在所有地方执行(Write-Once/Run-Anywhere

Java 的安装

为了编译和运行代码,首先必须安装 JDK(Java Development Kit,JAVA 软件开发工具包)。

Linux

CentOS

  1. 检查系统是否有默认 JDK

    • 没有默认 JDK

      sh
      $ java -version
      bash: java: 未找到命令...
    • 有默认 JDK

      sh
      $ java -version
      openjdk version "1.8.0_262"
      OpenJDK Runtime Environment (build 1.8.0_262-b10)
      OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

      卸载默认 JDK:

      sh
      $ yum -y autoremove java
  2. 安装自己的 JDK

    • 通过 YUM 安装

      通过 YUM 安装的 JDK 会自动设置 PATH 环境变量

      1. 列出可安装的 JDK

        sh
        $ yum list available java*
        可安装的软件包
        java-1.8.0-openjdk.x86_64                     1:1.8.0.262.b10-0.el8_2                  AppStream
        java-1.8.0-openjdk.x86_64                     1:1.8.0.262.b10-0.el8_2                  Stream-AppStream
        java-1.8.0-openjdk-accessibility.x86_64       1:1.8.0.262.b10-0.el8_2                  AppStream
        java-1.8.0-openjdk-accessibility.x86_64       1:1.8.0.262.b10-0.el8_2                  Stream-AppStream
        java-1.8.0-openjdk-demo.x86_64                1:1.8.0.262.b10-0.el8_2                  AppStream
        java-1.8.0-openjdk-demo.x86_64                1:1.8.0.262.b10-0.el8_2                  Stream-AppStream
        java-1.8.0-openjdk-devel.x86_64               1:1.8.0.262.b10-0.el8_2                  AppStream
        java-1.8.0-openjdk-devel.x86_64               1:1.8.0.262.b10-0.el8_2                  Stream-AppStream
        ...(省略)...
      2. 安装指定的 JDK

        sh
        $ yum install -y java-1.8.0-openjdk.x86_64
      3. 检查是否安装成功

        sh
        $ java -version
        openjdk version "1.8.0_262"
        OpenJDK Runtime Environment (build 1.8.0_262-b10)
        OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
    • 通过 tar.gz 压缩文件安装

      通过压缩文件安装的 JDK 需要手动设置 PATH 环境变量

      可以将下载好的 tar.gz 压缩文件上传至 Linux,也可以通过 curl 直接下载到 Linux。

      1. 通过 curl 下载 tar.gz 压缩文件

        sh
        $ curl -O https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
      2. 解压 tar.gz 压缩文件

        sh
        $ tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /usr/local/
      3. 设置 PATH 环境变量

        1. 编辑 /etc/profile 配置文件

          sh
          $ vim /etc/profile
        2. 在文件末尾写入 JAVA_HOME

          sh
          export JAVA_HOME=/usr/local/java-se-8u41-ri
          export PATH=${JAVA_HOME}/bin:$PATH
        3. 刷新配置文件

          sh
          $ source /etc/profile
      4. 检查是否安装成功

        sh
        $ java -version
        openjdk version "1.8.0_41"
        OpenJDK Runtime Environment (build 1.8.0_41-b04)
        OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)

Ubuntu

  1. 检查系统是否有默认 JDK

    • 没有默认 JDK

      sh
      $ java -version
      
      Command 'java' not found, but can be installed with:
      
      sudo apt install openjdk-11-jre-headless  # version 11.0.11+9-0ubuntu2~20.04, or
      sudo apt install default-jre              # version 2:1.11-72
      sudo apt install openjdk-13-jre-headless  # version 13.0.7+5-0ubuntu1~20.04
      sudo apt install openjdk-16-jre-headless  # version 16.0.1+9-1~20.04
      sudo apt install openjdk-17-jre-headless  # version 17+35-1~20.04
      sudo apt install openjdk-8-jre-headless   # version 8u292-b10-0ubuntu1~20.04

      提示

      上面提示的 Java 安装命令只会安装 JRE。如果要安装 JDK,需要将 jre 换成 jdk。例如:sudo apt install openjdk-8-jdk-headless

    • 有默认 JDK

      sh
      $ sudo apt list --installed openjdk*
      Listing... Done
      openjdk-8-jdk-headless/focal-security,focal-updates,now 8u292-b10-0ubuntu1~20.04 amd64 [installed]
      openjdk-8-jre-headless/focal-security,focal-updates,now 8u292-b10-0ubuntu1~20.04 amd64 [installed,automatic]

      卸载默认 JDK 及默认 JRE:

      sh
      $ sudo apt purge -y openjdk-8-jdk-headless
      $ sudo apt purge -y openjdk-8-jre-headless
  2. 安装自己的 JDK

    • 通过 APT 安装

      通过 APT 安装的 JDK 会自动设置 PATH 环境变量,同时也会自动安装 JRE,但需要手动配置 JAVA_HOME 环境变量

      1. 列出可安装的 JDK

        sh
        $ sudo apt update
        $ sudo apt list openjdk-*-jdk*
        Listing... Done
        openjdk-11-jdk-headless/focal-security,focal-updates 11.0.11+9-0ubuntu2~20.04 amd64
        openjdk-11-jdk/focal-security,focal-updates 11.0.11+9-0ubuntu2~20.04 amd64
        openjdk-13-jdk-headless/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
        openjdk-13-jdk/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
        openjdk-16-jdk-headless/focal-security,focal-updates 16.0.1+9-1~20.04 amd64
        openjdk-16-jdk/focal-security,focal-updates 16.0.1+9-1~20.04 amd64
        openjdk-17-jdk-headless/focal-updates 17+35-1~20.04 amd64
        openjdk-17-jdk/focal-updates 17+35-1~20.04 amd64
        openjdk-8-jdk-headless/focal-security,focal-updates 8u292-b10-0ubuntu1~20.04 amd64
        openjdk-8-jdk/focal-security,focal-updates 8u292-b10-0ubuntu1~20.04 amd64
      2. 安装指定的 JDK

        sh
        $ sudo apt install -y openjdk-8-jdk-headless
      3. 检查是否安装成功

        sh
        $ java -version
        openjdk version "1.8.0_292"
        OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10)
        OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
      4. 配置 JAVA_HOME

        在一些 Java 应用中,环境变量 JAVA_HOME 被用来表示 Java 安装位置。

        想要设置 JAVA_HOME 变量,首先使用 update-alternatives 找到 Java 安装路径:

        sh
        $ sudo update-alternatives --config java
        There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
        Nothing to configure.

        在这个例子中,安装路径为 /usr/lib/jvm/java-8-openjdk-amd64

        编辑 /etc/profile 配置文件,在文件末尾写入 JAVA_HOME

        sh
        export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
        export PATH=${JAVA_HOME}/bin:$PATH

        想要让修改在当前 shell 生效,你可以登出系统,再登入系统。或者运行下面的命令:

        sh
        source /etc/profile

        验证 JAVA_HOME 环境变量被正确设置:

        sh
        $ echo $JAVA_HOME
        /usr/lib/jvm/java-8-openjdk-amd64
    • 通过 tar.gz 压缩文件安装

      通过压缩文件安装的 JDK 需要手动设置 PATH 环境变量

      可以将下载好的 tar.gz 压缩文件上传至 Linux,也可以通过 curl 直接下载到 Linux。

      1. 通过 curl 下载 tar.gz 压缩文件

        sh
        $ curl -O https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
      2. 解压 tar.gz 压缩文件

        sh
        $ tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /usr/local/
      3. 设置 PATH 环境变量

        1. 编辑 /etc/profile 配置文件

          sh
          $ vim /etc/profile
        2. 在文件末尾写入 JAVA_HOME

          sh
          export JAVA_HOME=/usr/local/java-se-8u41-ri
          export PATH=${JAVA_HOME}/bin:$PATH
        3. 刷新配置文件

          sh
          $ source /etc/profile
      4. 检查是否安装成功

        sh
        $ java -version
        openjdk version "1.8.0_41"
        OpenJDK Runtime Environment (build 1.8.0_41-b04)
        OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)

Java 的工作方式

  1. 编写源代码文件(扩展名为 .java)。
  2. 用编译器运行源代码,编译器会检查错误。
  3. 编译器会产生字节码文件(扩展名为 .class),编译器后的字节码与平台无关。
  4. Java 虚拟机(JVM)可以读取并执行字节码。

Java 的程序结构

(图片来源:Head First Java)

  • 类存与源文件里面

    什么是源文件?
    源文件(扩展名为 .java)带有类的定义。类用来表示程序的一个组件,小的程序或许只有一个类。类的内容必须包在花括号里面。

    java
    public class Dog {
    
    
    
    // 这是类
    
    
    
    
    }
  • 方法存于

    什么是类?
    类中带有一个或多个方法。在 Dog 这个类中,bark 方法带有如何“旺旺”的指令。方法必须在类的内部声明。

    java
    public class Dog {
    
        void bark() {
            
            // 这是方法
            
        }
        
        
    }
  • 语句(statement)存于方法

    什么是方法?
    在方法的花括号中编写方法应该执行的指令。方法中的代码由语句构成。你可以把方法想象成一个函数或过程。

    java
    public class Dog {
        
        void bark() {
    
            System.out.println("旺旺……"); // 这是语句
            
        }
        
        
    }

Java 类

JVM 启动执行时,它会锁定像下面这样一个特定的方法:

java
public static void main(String[] args) {
    
    // 程序代码写在这里
}

接着 JVM 就会执行 main 方法中的所有指令。每个 Java 程序最少都会有一个类以及一个 main()。但是应用程序只能有一个 main() 入口。

(图片来源:Head First Java)

编写带有 main() 的类

在 Java 中的所有东西都会属于某个类。要执行程序就代表要命令 JVM 去“加载 HelloWorld 这个类,开始执行它的 main(),然后一直运行到 main() 的所有程序代码结束为止”。

  1. 编写并保存

    HelloWorld.java

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

    java
    $ javac HelloWorld.java
  3. 运行

    java
    $ java HelloWorld
    Hello, World!

Released under the MIT License.