Appearance
Java 入门
Java 将带你进入新领域。它从一开始就以友好的语法、面向对象、内存管理和最棒的跨平台可抑制性来吸引程序员。写一次就可以在所有地方执行(Write-Once/Run-Anywhere
)。
Java 的安装
为了编译和运行代码,首先必须安装 JDK(Java Development Kit,JAVA 软件开发工具包)。
Linux
CentOS
检查系统是否有默认 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
安装自己的 JDK
通过 YUM 安装
通过 YUM 安装的 JDK 会自动设置
PATH
环境变量。列出可安装的 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 ...(省略)...
安装指定的 JDK
sh$ yum install -y java-1.8.0-openjdk.x86_64
检查是否安装成功
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。通过
curl
下载tar.gz
压缩文件sh$ curl -O https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
解压
tar.gz
压缩文件sh$ tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /usr/local/
设置
PATH
环境变量编辑
/etc/profile
配置文件sh$ vim /etc/profile
在文件末尾写入
JAVA_HOME
shexport JAVA_HOME=/usr/local/java-se-8u41-ri export PATH=${JAVA_HOME}/bin:$PATH
刷新配置文件
sh$ source /etc/profile
检查是否安装成功
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
检查系统是否有默认 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
安装自己的 JDK
通过 APT 安装
通过 APT 安装的 JDK 会自动设置
PATH
环境变量,同时也会自动安装 JRE,但需要手动配置JAVA_HOME
环境变量。列出可安装的 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
安装指定的 JDK
sh$ sudo apt install -y openjdk-8-jdk-headless
检查是否安装成功
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)
配置 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
:shexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=${JAVA_HOME}/bin:$PATH
想要让修改在当前
shell
生效,你可以登出系统,再登入系统。或者运行下面的命令:shsource /etc/profile
验证
JAVA_HOME
环境变量被正确设置:sh$ echo $JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
通过
tar.gz
压缩文件安装通过压缩文件安装的 JDK 需要手动设置
PATH
环境变量。可以将下载好的
tar.gz
压缩文件上传至 Linux,也可以通过curl
直接下载到 Linux。通过
curl
下载tar.gz
压缩文件sh$ curl -O https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
解压
tar.gz
压缩文件sh$ tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /usr/local/
设置
PATH
环境变量编辑
/etc/profile
配置文件sh$ vim /etc/profile
在文件末尾写入
JAVA_HOME
shexport JAVA_HOME=/usr/local/java-se-8u41-ri export PATH=${JAVA_HOME}/bin:$PATH
刷新配置文件
sh$ source /etc/profile
检查是否安装成功
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 的工作方式
- 编写源代码文件(扩展名为 .java)。
- 用编译器运行源代码,编译器会检查错误。
- 编译器会产生字节码文件(扩展名为 .class),编译器后的字节码与平台无关。
- Java 虚拟机(JVM)可以读取并执行字节码。
Java 的程序结构
(图片来源:Head First Java)
类存与源文件里面
什么是源文件?
源文件(扩展名为 .java)带有类的定义。类用来表示程序的一个组件,小的程序或许只有一个类。类的内容必须包在花括号里面。javapublic class Dog {
// 这是类 } 方法存于类中
什么是类?
类中带有一个或多个方法。在Dog
这个类中,bark
方法带有如何“旺旺”的指令。方法必须在类的内部声明。javapublic class Dog { void bark() { // 这是方法 } }
语句(statement)存于方法中
什么是方法?
在方法的花括号中编写方法应该执行的指令。方法中的代码由语句构成。你可以把方法想象成一个函数或过程。javapublic 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()
的所有程序代码结束为止”。
编写并保存
HelloWorld.java
javapublic class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
编译
java$ javac HelloWorld.java
运行
java$ java HelloWorld Hello, World!