1. 第一个 Java 程序
- 新建一个HelloWorld.java文件,然后在文件内写入如下代码:
// Java 的第一个程序
// 对代码的相关说明
// 1. 表示 Hello 是一个public类,公有类
public class HelloWorld { // 表示一个类的开始
// 主函数
public static void main(String[] args){
System.out.println("hello world");
}
} // 表示一个类的结束
- 编译代码
# 查看编写的 Java 文件
$ ls
HelloWorld.java
# 使用 Javac 编译
$ javac HelloWorld.java
$
# 编译后产生了 HelloWorld.class 字节码文件
$ ls
HelloWorld.class HelloWorld.java
# 使用 Java 命令运行 Java 程序
$ java HelloWorld
hello world
- 注意事项:
- Java 源文件以
.java
为扩展名。源文件的基本组成部分是类class
,如本类中的 HelloWorld 类 - Java 应用程序的执行入口是 main() 方法,它有固定的书写格式:
public static void main(String[] args){
...
}
- Java 语言严格区分大小写
- Java 方法由一条条语句构成,每个语句必须以
;
结束 - 大括号是成对出现的,缺一不可。
2. Java 的类与主函数
Java 是面向对象的语言, 所以类(class) 是程序的基本单位,所有程序块必须放在类里。不允许可执行性的语句或方法等成分独立存在。
最简单的Java 程序就是一个空的类, 即:
class HelloWorld{}
这是最简单的 Java 类, 这个类没有任何成分, 使用 javac 进行编译也是可以通过的
但是使用 Java 运行该类则会报错, 因为 Java 解释器要求被执行的类必须包含 main
函数
- main 函数的要求
main
函数 必须使用public static
修饰main
函数 返回值必须是void
main
函数 方法的形参必须是字符串数组类型String args[]
也就是说 main
函数的写法基本上是固定的, 即:
// main 函数
public static void main(String args[]){
// 执行内容
}
3. Java 源文件的命名规则
Java 程序对 Java 源文件的明明有着严格的要求:
- Java 文件的扩展名必须是
.java
- 如果 Java 源文件中定义了 public class, 那么源文件的名称必须与 public class 修饰的类名一致, 所以 Java 文件中最多只能定义一个 public class
- Java 源文件中可以定义多个非 public class, 这些类之间完全独立, 只是定义在同一个源文件中而已
- 创建 ClassName.java 写入如下三个类
class Dog{}
class Cat{}
class House{}
# 编译文件
$ vim ClassName.java
# 查看编译后的文件
$ ls
Cat.class ClassName.java Dog.class House.class
# 在同一个 Java 源文件中编写的每一个类在编译后, 都会生成一个与之对应的 class 字节码文件
4. Jshell java 的命令行交互工具
在 JDK 9 开始 Java 也提供了一个内置的命令行交互工具 — Jshell
, 它是一个 REPL (Read, Eval, Pring Loop) 工具, 可用于执行 Java 的变量声明, 语句和表达式, 并且可立即得到结果。
在没有 Jshell 时, 想要测试新的 API 通常要打开 IDE , 然后创建测试下项目,新建类然后才能开始测试 API, Jshell 的出现完全解决了这个痛点.
Jshell 的启动很简单, 在命令行窗口 输入 jshell
即可进入交互模式:
intro | jshell 工具的简介 |
---|---|
keys | 类似 readline 的输入编辑的说明 |
id | 片段 ID 以及如何使用它们的说明 |
shortcuts | 片段和命令输入提示, 信息访问以及自动代码生成的按键说明 |
context | /env /reload 和 /reset 的评估上下文选项的说明 |
rerun | 重新评估以前输入片段的方法的说明 |
4.1 list
作用 : 显示前面带有其片段 ID 的片段。
命令 | 作用 |
---|---|
/list | 列出您输入的或使用 /open 读取的当前活动的代码片段 |
/list -start | 列出自动导入的包 |
/list -all | 列出所有片段,包括失败的片段、覆盖的片段、删除的片段和启动片段 |
/list <名称> | 列出具有指定名称的片段(特别是活动片段) |
/list | 列出具有指定片段 ID 的片段。 可以使用一个或多个 ID 或 ID 范围,参见 ‘/help id’ |
- jshell 使用示例
# 计算 10 + 10
jshell> 10 + 10
$1 ==> 20
# 定义变量
jshell> var name="java"
name ==> "java"
# 做字符串拼接
jshell> var n = name+"-"+$1
n ==> "java-20"
# 打印拼接的字符串
jshell> System.out.println(n)
java-20
jshell> /list -start
s1 : import java.io.*;
s2 : import java.math.*;
s3 : import java.net.*;
s4 : import java.nio.file.*;
s5 : import java.util.*;
s6 : import java.util.concurrent.*;
s7 : import java.util.function.*;
s8 : import java.util.prefs.*;
s9 : import java.util.regex.*;
s10 : import java.util.stream.*;
# 打印所有语句
jshell> /list -all
s1 : import java.io.*;
s2 : import java.math.*;
s3 : import java.net.*;
s4 : import java.nio.file.*;
s5 : import java.util.*;
s6 : import java.util.concurrent.*;
s7 : import java.util.function.*;
s8 : import java.util.prefs.*;
s9 : import java.util.regex.*;
s10 : import java.util.stream.*;
1 : 10 + 10
2 : var name="java";
3 : var n = name+"-"+$1;
4 : System.out.println(n)
4.2 edit
在外部编辑器中编辑源的片段。使用 /set editor 可以设置要使用的编辑器。如果尚未设置编辑器,则将按顺序检查以下环境变量:JSHELLEDITOR、VISUAL和 EDITOR。如果尚未设置编辑器并且未设置任何编辑器环境变量,则将启动一个简单的编辑器。
命令 | 功能 |
---|---|
/edit <名称> | 编辑具有指定名称的片段(特别是活动片段) |
/edit <id> | 编辑具有指定片段 ID 的片段。 可以使用一个或多个 ID 或 ID 范围,参见 ‘/help id’ |
/edit -start | 编辑启动片段。任何更改保持在此会话中,不影响启动设置 |
/edit -all | 编辑所有片段,包括失败的片段、覆盖的片段、删除的片段和启动片段 |
/edit | 编辑您键入或使用 /open 读取的当前活动的代码片段 |
4.3 drop
删除片段 – 使片段处于不活动状态。
命令 | 功能 |
---|---|
/drop <名称> | 删除具有指定名称的片段 |
/drop <id> | 删除具有指定片段 ID 的片段。可以使用一个或多个 ID 或 ID 范围,参见 ‘/help id’ |
4.4 save
将指定的片段和/或命令保存到指定文件。
命令 | 功能 |
---|---|
/save <文件> | 将当前活动片段的源保存到文件。 |
/save -all <文件> | 将所有片段的源保存到文件。这包括覆盖的、失败的以及启动代码的源。 |
/save -history <文件> | 保存自启动 jshell 工具以来输入的所有命令和片段的顺序历史记录。 |
/save -start <文件> | 将当前启动定义保存到文件 |
/save <id> <文件> | 保存具有指定片段 ID 的片段。可以使用一个或多个 ID 或 ID 范围,参见 ‘/help id’ |
4.5 open
打开文件并读取其内容作为片段和命令。
命令 | 功能 |
---|---|
/open <文件> | 读取指定的文件作为 jshell 工具输入。 <文件> 可以是操作系统文件名, 也可是预定义的文件名之一:DEFAULT、PRINTING 或 JAVASE。 这些项的说明分别如下: 默认导入片段(如 -default 所使用的), print()、println() 和 printf() 方法片段的定义,或所有 Java SE 程序包的导入项。 |
4.6 vars
列出已输入变量的类型、名称和值。
命令 | 功能 |
---|---|
/vars | 列出当前活动变量的类型、名称和值 |
/vars <名称> | 列出具有指定名称的变量(特别是活动变量) |
/vars <id> | 列出具有指定片段 ID 的变量。可以使用一个或多个 ID 或 ID 范围,参见 ‘/help id’ |
/vars -start | 列出已评估启动片段中的变量 |
/vars -all | 列出所有变量,包括已失败变量、已覆盖变量、已删除变量和启动变量 |
4.7 methods
列出已输入方法的名称、参数类型和返回类型。
命令 | 功能 |
---|---|
/methods | 列出当前活动方法的名称、参数类型和返回类型 |
/methods <名称> | 列出具有指定名称的方法(特别是活动方法) |
/methods <id> | 列出具有指定片段 ID 的方法。可以使用一个或多个 ID 或 ID 范围,参见 ‘/help id’ |
/methods -start | 列出已评估启动片段中的方法 |
/methods -all | 列出所有片段,包括失败的片段、覆盖的片段、删除的片段和启动片段 |
4.8 types
列出已输入的类和接口。
命令 | 功能 |
---|---|
/types | 列出当前活动的类型声明 |
/types <名称> | 列出具有指定名称的类型声明(特别是活动片段) |
/types <id> | 列出具有指定片段 ID 的类型声明。可以使用一个或多个 ID 或 ID 范围,参见 ‘/help id’ |
/types -start | 列出已评估启动片段中的类型声明 |
/types -all | 列出所有类型声明,包括已失败类型声明、已覆盖类型声明、已删除类型声明和启动类型声明 |
4.9 imports
列出当前活动的导入。这包括来自启动片段的导入。
命令 | 功能 |
---|---|
import <包> | 导入需要的类 |
4.10 exit
退出 jshell 工具。不保存工作。在使用此命令前应该先保存任何工作
命令 | 功能 |
---|---|
/exit | 退出 jshell 工具。退出状态为零 |
/exit <整数表达式片段> | 评估片段。如果片段失败或者不是整数表达式,则显示错误。 否则退出 jshell 工具,并将表达式的值作为退出状态 |
4.11 env
查看或更改评估上下文。评估上下文是类路径,模块路径等等。
命令 | 功能 |
---|---|
/env | 显示作为上下文选项显示的评估上下文 |
/env [-class-path <路径>] [-module-path <路径>] [-add-modules <模块>] … |
在至少设置一个选项的情况下,设置评估上下文。 如果已定义片段,则将使用新评估上下文重置执行状态, 并且将重放片段 – 不显示重放,但是将显示所有错误。 |
4.12 reset
重置 jshell 工具代码和执行状态:
4.13 reload
重置 jshell 工具代码和执行状态,然后按照各有效片段和任何 /drop 命令的输入顺序重放它们。
命令 | 功能 |
---|---|
/reload | 重置和重放自进入 jshell 工具以来的有效历史记录,或者执行 /reset 或 /reload 命令中最新的那个命令 |
/reload -restore | 重置并重放上一次进入 jshell 工具与最近进入 jshell 工具之间的有效历史记录,或者执行 /reset、/reload 或 /env 命令。这进而可用于还原上一个 jshell 工具会话 |
/reload [-restore] -quiet | 使用 ‘-quiet’ 参数时,不显示重放,但将显示所有错误 |
4.14 history
显示输入的片段和命令的历史记录。
命令 | 功能 |
---|---|
/history | 列出自启动此 jshell 工具以来输入的片段和命令的历史记录 |
/history -all | 列出此会话和以前会话中输入的片段和命令的历史记录 |
4.15 help
显示有关使用 jshell 工具的信息。
命令 | 功能 |
---|---|
/help | 列出 jshell 工具命令和帮助主题 |
/help <command> | 显示有关指定命令的信息。只需输入命令的前几个字母 – 如果有多个匹配项,则将显示项。示例:/help /li |
/help <subject> | 显示有关指定帮助主题的信息。示例:/help intro |
4.16 set
设置 jshell 工具配置信息,包括:要使用的外部编辑器、要使用的启动定义、新的反馈模式、命令提示符、要使用的反馈模式或输出的格式。
命令 | 功能 |
---|---|
/set editor [-wait] <命令> <可选参数>… | 指定要为 /edit 命令启动的命令。 <命令> 是与操作系统相关的字符串 |
/set start <文件> | 指定 <文件> 的内容将成为默认启动片段和命令 |
/set feedback <模式> | 设置用于描述为所输入片段和命令显示的反馈的反馈模式 |
/set mode <模式> [<旧模式>] -command|-quiet|-delete | 创建或更新用户定义的反馈模式,可以选择从现有模式复制 |
/set prompt <模式> “<提示>” “<更多提示>” | 设置为给定反馈模式显示的提示符 |
/set truncation <模式> <长度> <选择器>… | 设置显示值的最大长度 |
/set format <模式> <字段> “<格式>” <选择器>… | 通过设置当选择器匹配时字段的格式来配置反馈模式 |
/set indent <数字> | 设置应用于自动缩进片段的空格数 |
/set | 以 /set 命令形式显示编辑器、启动和反馈设置。 要显示以上任意项的设置,请忽略 set 值 |