正在加载...

Java 中的字段

在 Cup.java 的类 Cup 里放一个名为 fill 的 int 字段。在 Shelf.java 里用 Cup c = new Cup(); 构建一个杯子,用 c.fill = 3; 存一个数,再用 System.out.println(c.fill); 打印该字段。编译这两个文件并运行 java Shelf。屏幕应显示一行:3。字段把数据保存在那一个对象上。你通过命名该对象的变量来触及它。在对象上存取这个值,就是本页要教的内容。

对象上的数据位置

在对象那一页,beep 只负责打印。它没有为以后保存一个数字。字段是在类里声明的一个名字,每个对象都可以在其中保存自己的值。new 构建出对象之后,你通过对象变量给字段赋值,然后可以打印它。
先创建 Cup.java。public class 行是 public class Cup。不要在这里留下旧的 Chip 或 Badge 类名。在类的花括号里写一行字段:int fill;。第一个代码框里没有方法。本页的 Cup.java 里没有 main。编译前先保存。

Cup with fill field

java
public class Cup {
    int fill;
}

Shelf 赋值 fill,再打印

在同一文件夹创建 Shelf.java。它的 public class 行是 public class Shelf。在 main 里按顺序写三行:Cup c = new Cup();,然后 c.fill = 3;,然后 System.out.println(c.fill);。第一行构建对象。第二行把 3 存进该对象的 fill。第三行打印已存的数字。

Shelf sets and prints fill

java
public class Shelf {
    public static void main(String[] args) {
        Cup c = new Cup();
        c.fill = 3;
        System.out.println(c.fill);
    }
}

在放着这两个文件的文件夹里运行 javac Cup.java Shelf.java。两个文件都写好后,也可以先编译 Cup.java,再编译 Shelf.java。当圆括号、花括号和分号都配对时,javac 不会自己写出一行。然后运行 java Shelf——不要 java Shelf.java,也不要 java Cup。运行命令不要带 .java 结尾。启动带有 main 的那个类。同样的命令在 Windows 和 macOS 上都可用。
程序应打印一行后停止:3。它不会让你输入。如果终端在等待键盘输入,说明某个文件里还留着旧练习的 nextLine 调用。删掉那个调用,在 Shelf 里保留上面三行,并在 Cup 里保留 fill 字段。
把运行走一遍。Java 从 Shelf.main 开始。new Cup() 构建一个对象并存进 c。赋值 c.fill = 3 把 3 写入该对象的字段。println(c.fill) 读取同一字段并打印 3。屏幕上的数字是对象上保存的值,不是像 "ok" 那样硬编码打印字符串。
字段名 fill 在类里只声明一次。从 Cup 构建出的每个对象都有该名字的独立槽位。当你写 c.fill 时,先命名对象,再命名该对象上的槽位。这个顺序——先对象,后字段——就是本页保持的形态。

类、对象与字段对照

把三个名字在一张小表里读一遍。本页的字段行总是经过对象。

📊 class object field

名称 在本页是什么
Cup Cup.java 里的类 / 类型
c 用 new Cup() 构建出的一个对象
c.fill 保存在该对象上的那个 int

不通过对象就写 Cup.fill = 3;,不符合本页的初学者形态。字段在 new 之后属于每个对象。先构建,再通过变量赋值。只写 new Cup(); 却不保存结果,也会让你没有名字去写 fill。保持 Cup c = new Cup();,然后 c.fill = 3;。
残留的对象演示会搅乱文件夹。仍然带着 Chip 类并调用 c.beep(); 的文件是上一课。本页请保留 Cup、Shelf 和 fill 字段。这里不需要 beep。
如果你用 System.out.println(c); 打印 c 本身,屏幕不会干净地显示 3。它会打印默认的对象文本。要看到已存的数字,请打印 c.fill。

两个杯子各自保存 fill

你可以从 Cup 构建两个对象。每个都有自己的 fill。改其中一个不会改另一个。
在 Shelf 里可以写 Cup a = new Cup(); 和 Cup b = new Cup();,然后 a.fill = 2; 和 b.fill = 9;,再打印 a.fill 和 b.fill。在 javac Cup.java Shelf.java 和 java Shelf 之后,屏幕应一行显示 2,下一行显示 9。两个对象共享声明 fill 的类文本,但每个对象保存自己的数字。
如果你本意是两个不同数字,两处打印却显示相同值,请检查你是否给两个字段都赋了值,以及是否写成了 Cup b = a;。那一行让 b 指向与 a 相同的对象,于是两个名字共享一个 fill。本页若要两个分开的 fill,请使用两个 new Cup() 表达式。
这项练习不需要第三个代码框。仔细编辑 Shelf,重新编译再运行。然后如果想保留测验的第一种形态,可以把单杯子代码框改回来。

constructors 稍后会加什么

本页在 new 之后用单独一行给字段赋值:c.fill = 3;。后面的页面——constructors——会展示在对象构建时设定起始值的另一种方式。这里请停留在普通字段和 new 之后的赋值。本页不要发明构造方法。
从未赋值的字段有默认值:int 字段从 0 开始。如果在任何赋值之前打印 c.fill,屏幕可能显示 0。本页仍然教你自己写出的赋值,所以在主演示里请把 c.fill = 3; 放在打印之前。
如果编译 Shelf.java 时 javac 找不到符号 Cup,请检查 Cup.java 是否与 Shelf.java 同在,且类行是 public class Cup。如果期望 3 却看到 0,赋值行可能缺失,或跑在打印之后——把 c.fill = 3; 放在 println(c.fill) 上面。

在 constructors 之前

你可以在 Cup 里声明 int fill;,用 Cup c = new Cup(); 构建,赋 c.fill = 3;,再从 Shelf 打印 c.fill。编译两个文件并运行 java Shelf。屏幕显示 3。两个对象可以保存两个不同的 fill。下一页是 constructors,你将在 new 构建对象的那一刻开始设定值。

🧠 测试您的知识

准备开始

测试您的知识

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

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

📝 说明

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