正在加载...

Java 中的类

类是你在 .java 文件里声明的具名类型。把 public class Badge 放进名为 Badge.java 的文件。在该类型里写一个简短的 static 方法 show,打印 ready。在第二个文件 Desk.java 里放 public class Desk,其 main 调用 Badge.show();。编译这两个文件,再运行 java Desk。屏幕应显示一行:ready。这里不是用递归倒数。你是在自己的文件里命名一个类型,并让该类型的方法去打印。这第二个具名类型——不只是启动文件的那个类——就是本页要教的内容。

类型住在自己的文件里

到方法那些页为止,几乎每个演示都把 main 和辅助方法放在同一个 public class 里。那样仍然可用。本页故意加上第二个 public class。Badge 是一个类型名。它不必是启动的程序。Desk 才是启动的程序。每个 public class 都放在与类名完全一致的文件里,包括大写字母。
先创建 Badge.java。类型的第一行是 public class Badge。不要在这个文件里写 public class Desk。不要在这里留下旧的 Ladder 或 Gate 类名。编译器把 public class 名与文件名绑在一起。若文件是 Badge.java 而那一行写成 public class Ladder,javac 会拒绝。
在 Badge 的花括号里写 static void show()。方法体是一次打印:System.out.println("ready");。本页保持 void。方法不返回数字。它只写一个词。本页的 Badge.java 里没有 main。这是故意的。类可以容纳方法,而不必是启动类。
编译前先保存 Badge.java。第一个代码框里的程序就是单独这个文件。

Badge type with show

java
public class Badge {
    static void show() {
        System.out.println("ready");
    }
}

Desk 启动;Badge 打印

在同一文件夹再创建第二个文件:Desk.java。它的 public class 行是 public class Desk。在 main 里写一次调用:Badge.show();。这次调用写出类型 Badge、一个点,再写方法 show。除非 show 也住在 Desk 里,否则不要在 Desk 里只写 show();。本页上 show 属于 Badge,所以调用要带上类型名。

Desk main calls Badge.show

java
public class Desk {
    public static void main(String[] args) {
        Badge.show();
    }
}

两个文件应放在同一文件夹,好让 javac 一起看到它们。在该文件夹运行 javac Badge.java Desk.java。也可以先编译 Badge.java 再编译 Desk.java;文件齐全时两种顺序都行。当圆括号、花括号和分号都匹配时,javac 自己不会写出一行。然后运行 java Desk——不要写成 java Desk.java,也不要写成 java Badge。运行命令去掉 .java 后缀。启动带有 main 的那个类。这两类命令在 Windows 和 macOS 上都一样。
程序应打印一行后停止:ready。它不应等待你输入。如果终端在等键盘输入,说明某个文件里还留着旧练习的 nextLine 调用。删掉它,只保留 Desk 里的 Badge.show(); 以及 Badge 里的 show 方法。
把这次运行走一遍。Java 从 Desk.main 开始。调用 Badge.show() 进入类型 Badge 里的方法。该方法打印 ready 并返回。然后 Desk 结束。屏幕上的词来自 Badge,不是写在 Desk 自己里面的 println。这种拆分就是重点:一个类启动程序;另一个类拥有辅助方法。

文件名与 public class 必须一致

用一张小表把配对读一遍。每个 public class 拥有一个文件名。

📊 file, public class, role

文件 public class 本页角色
Badge.java Badge 容纳 show 的类型
Desk.java Desk 容纳 main 的程序

若把文件改名为小写 b 的 badge.java,而那一行仍写 public class Badge,有些系统会把这种不一致当成错误。在本页初学者形状里,两处都保留大写 B。若把 public class Badge 和 public class Desk 放进同一文件,javac 会拒绝:每个文件一个 public class。同一文件里的 private 辅助类留给后面的课程。这里保留两个 public 文件。
常见混淆是因为刚写了 Badge.java 就运行 java Badge。本页上该类没有 main,所以运行无法启动。请运行 java Desk。另一种混淆是在 show 只存在于 Badge 时,于 Desk 里不写 Badge. 前缀而写 show();。那时编译器会在 Desk 里找 show 并找不到。
残留的递归演示会搅乱文件夹。仍叫 Ladder.java 且含有 down(3) 的文件是另一个程序。学这两文件形状时,把本课文件夹聚焦在 Badge.java 与 Desk.java。这里不需要 down。

先编译类型,再编译启动类

可以把编译步骤拆小练习。先只编译类型:javac Badge.java。这条命令会检查 Badge,即使还什么都没启动。类文件可以没有 main 也能编译。再编译启动类:javac Desk.java。若同一文件夹里已有编译好的 Badge,Desk 就能解析调用里的名字 Badge。最后运行 java Desk,确认那一行 ready。
若 javac Desk.java 说找不到符号 Badge,检查三件事。文件夹里必须在 Desk.java 旁边有 Badge.java 或已编译的 Badge 类。调用必须用与类型相同的大写写出 Badge。点后面的方法名必须是 show,与 Badge 里的头一致。
在 Desk 里写 System.out.println("Badge"); 会打印单词 Badge。它并不调用类型上的方法。若要看到住在 Badge 里的打印,请保持 Badge.show();。

本页还不做的事

本页不写 new Badge()。从类创建对象是下一页。这里的调用是 Badge.show()——直接写在类型名上的 static 方法。你也还没在 badge 上存字段。字段留给本模块更后面的页。现在的工作只是:自己文件里的具名类型、匹配的 public class 行,以及使用该类型名的调用。
可以把 show 里打印的词改成 set,再重新编译两个文件(或至少 Badge.java,然后再次运行 Desk)。屏幕应跟随你在 Badge 里放的字符串。Desk 保持同一调用。再看一次拆分:改类型的方法,保留启动类的调用。

进入 objects 之前

你可以在 Badge.java 里声明 public class Badge,放入 static void show(),并从 Desk.main 调用 Badge.show();。文件名与 public class 名一致。编译类型和启动类,再运行 java Desk。屏幕显示 show 打印的那一行。类就是那个具名类型。下一页是 objects;在那里你用 new 从类构造一个值。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
4
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部