Java 包
把类 Bell 放进名为 kit 的文件夹,首行写 package kit;,并写一个打印 ding 的静态方法 ring()。在该文件夹旁——不要放进 kit 里——的 Lobby.java 中,从 main 调用 kit.Bell.ring();。从父文件夹编译并运行 java Lobby。屏幕应显示一行:ding。包名与文件夹名一致。用前面的 kit.Bell 来调用,就是本页要教的内容。把单词 import 留给下一页。
文件声明的文件夹名
到目前为止,每个类都坐在一个扁平文件夹里。包把类按文件夹名分组。文件的第一行必须写出该名:package kit;。文件 Bell.java 必须放在名为 kit 的文件夹里。若文件夹与 package 行不一致,javac 会抱怨。
先创建文件夹 kit。在里面创建 Bell.java。第一行是 package kit;。然后 public class 行是 public class Bell。不要在这里留下旧的 Gate 或 Tag 类名。写一个静态方法:
public static void ring() { System.out.println("ding"); }
给方法加上 public,好让包外的类能调用它。Bell.java 里没有 main。编译前先保存。
package kit;
public class Bell {
public static void ring() {
System.out.println("ding");
}
}
Lobby 调用 kit.Bell.ring
在父文件夹创建 Lobby.java——与 kit 文件夹同级,不要放进 kit。它的 public class 行是 public class Lobby。在 main 里写 kit.Bell.ring();。本页不要写 import kit.Bell;。完整名 kit.Bell 对调用已经足够。
把 Lobby 保持为持有 main 的类。本课不要把 main 放进 Bell。若 access 页留下的 Pier 文件仍在附近,本课不要运行 java Pier——从父文件夹编译之后运行 java Lobby。
public class Lobby {
public static void main(String[] args) {
kit.Bell.ring();
}
}
在同时放着 Lobby.java 和 kit 文件夹的父文件夹里,运行 javac kit/Bell.java Lobby.java。在 Windows 上也可以用 kit\Bell.java 表达同一意思——把 javac 指向包文件夹里的文件,再指向 Lobby.java。当圆括号、花括号和分号都配对时,javac 不会自己写出一行。然后运行 java Lobby——不要 java Lobby.java,也不要 java kit.Bell。运行命令不要带 .java 结尾。启动带有 main 的那个类。路径与你的 shell 一致时,同样的命令在 Windows 和 macOS 上都可用。
程序应打印一行后停止:ding。它不会让你输入。如果终端在等待键盘输入,说明某个文件里还留着旧练习的 nextLine 调用。删掉那个调用,在 Lobby 里保留 kit.Bell.ring();,并在 Bell 里保留 package kit;。
把运行走一遍。Java 从 Lobby.main 开始。调用 kit.Bell.ring() 找到包 kit 里的类 Bell,并运行该静态方法。方法体打印 ding。屏幕显示 ding。不应再打印别的内容。若你看到 9 或 ok,说明仍在运行上一页留下的旧 Pier 或 Yard 程序。
若 Bell.java 与 Lobby.java 并排放着却没有 kit 文件夹,而文件仍写着 package kit;,javac 会拒绝。把文件移进 kit。若从包外写成不带 kit. 的 Bell.ring();,本页上 javac 看不到短名——请保留 kit.Bell.ring();。在下一页教 import 之前,包名是类型全名的一部分。
文件夹与 package 行对照
一张短表把对应关系说清楚。
📊 folder vs package line
| 部分 | 本页 |
|---|---|
| 文件夹名 | kit |
| Bell.java 首行 | package kit; |
| 从 Lobby 调用 | kit.Bell.ring(); |
| import | 不在本页——下一课 |
表格只是提醒。你要保留的键入片段是 Bell 文件里的 package kit;、kit 下的文件路径,以及 Lobby 里的 kit.Bell.ring();。 |
与 access 以及扁平文件夹对比
在 access 那一页,Gate 与 Pier 共享一个文件夹,并带有 private 字段。那种写法仍然有效。本页加上包文件夹和 package 行。残留的 Gate g = new Gate(9); g.show(); 演示是另一课。本页请保留 kit/Bell.java、Lobby.java 和 kit.Bell.ring();。
小演示仍可用扁平文件夹。本课选择包,好让你看见类名前的名字。本页不要在同一个 Lobby 演示里混用 g.show() 和 kit.Bell.ring()。一条清楚路径就够:package 行、匹配的文件夹、从 Lobby 的完整调用。
从父文件夹编译,不要只在 kit 里
编译时以及运行 java Lobby 时,留在父文件夹。若你 cd 进 kit,却不把 classpath 故事理清就从那里跑 Lobby,本课的短路径会断。本页把父文件夹当作工作目录。编译成功后,Bell 的 .class 文件应出现在 kit 下,与 Bell.java 相邻。
若屏幕显示 9 或 ok,说明仍在运行旧的 Pier 或 Yard 程序。改跑 java Lobby。若 javac 找不到 kit.Bell,请逐字符检查文件夹名拼写和 package kit; 这一行。
留给 import 的内容
本页每次调用都键入完整名 kit.Bell。后面一页——import——会说明 import kit.Bell; 如何让你在 Lobby 里写短名 Bell。这里先留在完整名上。本页不要发明 import,除非你已经会用;本课目标是包文件夹和 kit.Bell.ring();。
若父文件夹里仍有旧的 Gate.java 或 Pier.java,可以不动它们,或仅在它们干扰编译命令时删除。编译本课的这对包文件之后,运行 java Lobby。
进入 import 之前
你可以把 Bell.java 放在文件夹 kit 下,写上 package kit; 和打印 ding 的 public static void ring(),并从 Lobby 在无 import 的情况下调用 kit.Bell.ring();。从父文件夹编译并运行 java Lobby。屏幕显示 ding。包名与文件夹一致。下一页是 import,在那里写了 import 行之后,短名就够用了。
把 package kit; 保持为 Bell 的第一行。把文件留在 kit 里。把调用保持为 kit.Bell.ring();。这三项习惯是本页继续前进前的检查点。当从父文件夹看到屏幕显示 ding 时,包布局已按本课意图工作。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部