【问题标题】:Java Homework Help (Accessing Static Member via Instance Reference)Java 作业帮助(通过实例引用访问静态成员)
【发布时间】:2023-03-10 16:36:01
【问题描述】:

这是我的作业问题:


为“时钟”类编写类声明。它应该具有小时、分钟、秒(所有整数)的实例变量。它还应该有一个 toString() 方法以如下所示的格式显示时间。编写一个单独的“ClockDriver”类来 a) 创建时钟实例,b) 设置时钟的小时、分钟和秒,以及 c) 使用 getTime() 显示时钟的时间。使用第 36 页的 Dog 类示例作为指导。示例如下:

时间是3:45:00

// 如果你不能同时得到两个零,请不要担心

// 第二个字段。那是格式问题

//我们稍后再处理


这是我的时钟类:

class Clock  {

int hours;
int minutes;
int seconds;


public String toString() {

    String temp = ("");
    return temp.format("%02d:%02d:%02d", hours, minutes, seconds);

} //end method toString

public void getTime() {

    System.out.print("The time is " + toString());

} //end method getTime

} //end class Clock

这是我的 ClockDriver 类:

public class ClockDriver {

    public static void main (String[] args) {

        Clock c = new Clock();
        c.hours = 4;
        c.minutes = 30;
        c.seconds = 00;
        c.getTime();

    } //end main

} //end class ClockDriver

尽管它编译得很好并且工作得很好,但我从 IDE 得到了我认为是警告说我的

return temp.format("%02d:%02d:%02d", hours, minutes, seconds);

line 正在通过实例引用访问静态成员。具体来说,

temp.format

位。

所以我的问题是:

1.) 为什么不一定鼓励通过实例引用访问静态成员?

2.) 有没有更好的方法将它们组合在一起,这样我就不会通过实例引用访问静态成员?

提前致谢!

【问题讨论】:

    标签: java instance static-members


    【解决方案1】:

    静态方法属于类本身,而不是任何实例。虽然您可以从该类的实例调用 static 方法,但您不必使用该类的实例,也不应该使用。这可能会造成混淆,因为看起来该方法不是static,尽管它是static

    调用static 方法的最佳和最清晰的方法是使用类名本身而不是类的实例来调用该方法:

    return String.format("%02d:%02d:%02d", hours, minutes, seconds);
    

    而且您根本不需要 temp 实例。

    【讨论】:

    • 好的,谢谢!我遇到了问题,我的老师用 temp 的方式向我扔了一个 sn-p。我猜他没想到我会弄清楚如何正确格式化,这就是为什么它没有成功。
    【解决方案2】:

    请记住,如果某个类的实例,我们将其称为 c,它有一个函数 void foo(),并且您使用实例 c 调用 foo,如下所示:

    c.foo();

    实际调用的是:

    foo(c);

    在调用静态函数时 void foo2():

    Class.foo2();

    按其外观调用。

    使用实例调用静态函数表示用户可能不确定自己在做什么。

    【讨论】:

      【解决方案3】:

      您实际上不应该使用字符串temp。您应该将其称为String.format。要回答您的问题,这很令人困惑,因为调用实际上并没有查看 temp

      【讨论】:

        猜你喜欢
        • 2021-08-16
        • 1970-01-01
        • 1970-01-01
        • 2017-05-11
        • 2021-08-19
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多