2.[Java 基础]第一个Java程序与Jshell介绍


1. 第一个 Java 程序

  1. 新建一个HelloWorld.java文件,然后在文件内写入如下代码:
// Java 的第一个程序
// 对代码的相关说明
// 1. 表示 Hello 是一个public类,公有类
public class HelloWorld { // 表示一个类的开始
  // 主函数
  public static  void main(String[] args){
     System.out.println("hello world");
  }
} // 表示一个类的结束
  1. 编译代码
# 查看编写的 Java 文件
$ ls
HelloWorld.java

# 使用 Javac 编译
$ javac HelloWorld.java
$
# 编译后产生了 HelloWorld.class 字节码文件
$ ls
HelloWorld.class    HelloWorld.java

# 使用 Java 命令运行 Java 程序
$ java HelloWorld
hello world
  • 注意事项:
  1. Java 源文件以 .java 为扩展名。源文件的基本组成部分是类 class ,如本类中的 HelloWorld 类
  2. Java 应用程序的执行入口是 main() 方法,它有固定的书写格式:
public static void main(String[] args){
  ...
}
  1. Java 语言严格区分大小写
  2. Java 方法由一条条语句构成,每个语句必须以 ; 结束
  3. 大括号是成对出现的,缺一不可。

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 源文件的明明有着严格的要求:

  1. Java 文件的扩展名必须是 .java
  2. 如果 Java 源文件中定义了 public class, 那么源文件的名称必须与 public class 修饰的类名一致, 所以 Java 文件中最多只能定义一个 public class
  3. 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 值

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
3.[Java 基础]注释,标识符与JavaDoc工具的介绍 3.[Java 基础]注释,标识符与JavaDoc工具的介绍
1. 注释 注释在程序中用来说明代码的作用, 类的用途, 方法的功能, 以及该方法的参数与返回值的数据类型以及意义等功能. 在程序运行时, 被注释的代码不会被运行, 所以注释也常被用于程序的调试, 使用可以判断异常代码的位置或缩小异常代码
2018-01-07
下一篇 
1.[Java 基础]Java背景概述与开发环境部署 1.[Java 基础]Java背景概述与开发环境部署
1. Java 语言的发展史 1990 年: Sun 公司成立由高斯林领导的 “Green 计划” , 计划为下一代智能家电编写一个通用控制系统。 1992 年: Green计划完成了一部分功能 , 但是并没有使用原计划的 C++ 语言
2018-01-02
  目录