正在加载...

Java 实例方法

在 Jar.java 里写一个类 Jar,带有名为 fill 的 int 字段、执行 fill = n; 的构造方法 Jar(int n),以及执行 fill = fill + 1; 的实例方法 void bump()。在 Desk.java 里用 Jar j = new Jar(3); 构建一个 jar,调用 j.bump();,然后打印 j.fill。编译这两个文件并运行 java Desk。屏幕应显示一行:4。方法在那一个对象上运行并更改它的字段。通过对象变量调用方法,就是本页要教的内容。

属于对象的方法

在更早的方法页里,你从 main 直接调用名字,前面没有对象。这里方法写在类上,但你通过 jar 变量到达它:j.bump()。那次调用使用 j 所命名的那个 jar 的字段。第二个 jar 会保留自己的 fill。
先创建 Jar.java。public class 行是 public class Jar。不要在这里留下旧的 Tin 或 Box 类名。在花括号里声明 int fill;。写出构造方法 Jar(int n) { fill = n; },用不同的名字,这样本页不需要 this。然后写实例方法:
void bump() { fill = fill + 1; }
Jar.java 里没有 main。编译前先保存。方法头部需要 void,因为 bump 不返回可打印的值。构造方法仍然没有 void——把这个差别保持清楚。

Jar with bump method

java
public class Jar {
    int fill;

    Jar(int n) {
        fill = n;
    }

    void bump() {
        fill = fill + 1;
    }
}

Desk 构建 jar 并调用 bump

在同一文件夹创建 Desk.java。它的 public class 行是 public class Desk。在 main 里按顺序写三行:Jar j = new Jar(3);,然后 j.bump();,然后 System.out.println(j.fill);。构造方法存下 3。调用 j.bump() 加一。打印显示新值。
把 Desk 保持为持有 main 的类。本课不要把 main 放进 Jar。若 this 页留下的 Lab 文件仍在文件夹里,本课不要运行 java Lab——编译 Jar.java 和 Desk.java 之后运行 java Desk。

Desk one bump

java
public class Desk {
    public static void main(String[] args) {
        Jar j = new Jar(3);
        j.bump();
        System.out.println(j.fill);
    }
}

在放着这两个文件的文件夹里运行 javac Jar.java Desk.java。两个文件都写好后,也可以先编译 Jar.java,再编译 Desk.java。当圆括号、花括号和分号都配对时,javac 不会自己写出一行。然后运行 java Desk——不要 java Desk.java,也不要 java Jar。运行命令不要带 .java 结尾。启动带有 main 的那个类。同样的命令在 Windows 和 macOS 上都可用。
程序应打印一行后停止:4。它不会让你输入。如果终端在等待键盘输入,说明某个文件里还留着旧练习的 nextLine 调用。删掉那个调用,在 Desk 里保留 new Jar(3)、j.bump() 和打印,并在 Jar 里保留 bump。
把运行走一遍。Java 从 Desk.main 开始。表达式 new Jar(3) 构建一个 jar,并把 3 存进 fill。调用 j.bump() 进入同一对象上的 bump。方法体写入 fill = fill + 1,于是 fill 变成 4。然后 main 打印 j.fill,屏幕显示 4。
若写成前面没有 j. 的 bump();,在这种 main 形状下 javac 会拒绝。实例方法需要对象。若写成像 static 调用一样的 Jar.bump();,那是下一课的想法——不是本页。请保留 j.bump();。

与 this 以及直接字段赋值对比

在 this 那一页,你在构造方法里用匹配的名字存字段。那种写法仍然有效。本页增加一个你可以在对象已经存在之后再调用的方法。带有 this.size = size; 的残留演示 Tin t = new Tin(7); 是另一课。本页请保留 Jar、Desk 和 j.bump();。
你仍可以在 main 里写 j.fill = j.fill + 1;。本课把那次更改移进 bump,让对象自己携带动作。用 System.out.println(j); 只打印 j 本身,不会干净地显示 4。要看到已存的数字,请打印 j.fill。

同一个 jar 上两次 bump

你可以在打印前两次调用 j.bump();。从 new Jar(3) 开始,bump 一次到 4,再 bump 一次到 5,然后打印。这项检查放进一个很小的第二段 Desk 演示即可。

Desk two bumps

java
public class Desk {
    public static void main(String[] args) {
        Jar j = new Jar(3);
        j.bump();
        j.bump();
        System.out.println(j.fill);
    }
}

再次编译并运行:javac Jar.java Desk.java,然后 java Desk。屏幕应显示 5。每一次 bump 调用都在同一对象上运行,并再加一。写成 Jar k = j; 不会构建第二个对象——需要两个分开的 fill 时,使用两次 new Jar(...)。对本页来说,同一个 jar 上两次 bump 就足以看到方法运行了两次。
若屏幕仍显示 3,可能缺少 bump 调用,或 main 仍在调用它们之前就打印。若显示 7 或其他残留数字,文件里可能还留着旧的 Tin 演示。请保留 new Jar(3) 和 bump 调用。

留给 static 的内容

本页通过对象调用方法:j.bump()。后面的页面——static——会展示属于类名本身、前面不需要对象的方法和字段。这里请停留在实例调用。本页不要发明 static void bump(),除非你已经会;本课目标是对象上的调用。
若编译 Desk.java 时 javac 找不到 Jar,请检查 Jar.java 是否在同一文件夹,且类行是 public class Jar。若屏幕显示 0,构造方法可能缺少存储,或 bump 从未运行——在打印前保留 Jar(int n) { fill = n; } 和 j.bump();。
当文件夹里仍有 this 页留下的 Tin.java 或 Lab.java 时,要么别动,要么仅在它们干扰编译命令时删除。编译本课的 Jar 与 Desk 这一对之后,运行 java Desk。

进入 static 之前

你可以声明 int fill;,写出 Jar(int n) { fill = n; } 和 void bump() { fill = fill + 1; },并从 Desk 运行 Jar j = new Jar(3);、j.bump();,然后打印 j.fill。编译这两个文件并运行 java Desk。屏幕显示 4。实例方法在该对象上运行并更改了它的字段。下一页是 static,有些成员属于类名,前面不需要对象变量。
方法上保留 void,构造方法上不要。调用前保留对象:j.bump();。打印保持在 j.fill。这三条习惯是本页继续前进前的检查点。

🧠 测试您的知识

准备开始

测试您的知识

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

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

📝 说明

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