Java作业帮助(通过实例引用访问静态成员)

24

以下是我的作业题目:


编写一个名为“Clock”的类声明。它应该具有小时、分钟、秒钟(都是整数)的实例变量。它还应该有一个toString()方法来显示以下格式的时间。编写一个单独的“ClockDriver”类,以a)创建一个时钟实例,b)设置时钟的小时、分钟和秒钟,c)使用getTime()显示时钟的时间。可参考第36页的Dog类示例。下面是一个样本输出:

The time is 3:45:00

// 如果秒的数字无法达到两位,不必担心

// 这是一个格式问题,我们稍后会处理


以下是我的Clock类:

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);

该行代码通过实例引用访问静态成员。具体来说,

temp.format

位(bit)。

所以我的问题是:

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

2.) 是否有更好的方法将其组合在一起,以便我不通过实例引用访问静态成员?

提前感谢!

3个回答

43

静态方法属于类本身,而不属于任何实例。虽然您可以从类的实例中调用static方法,但您不必使用类的实例,并且也不应该使用。这可能会令人困惑,因为它看起来像方法不是static的,即使它确实是static

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

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

而且你根本不需要使用 temp 实例。


好的,谢谢!我遇到了问题,我的老师给了我一个使用temp的片段。我想他没有预料到我会弄清楚如何正确地进行格式化,这就是为什么它没有成功的原因。 - Bit Deception

2
请记住,如果某个类的实例(我们称之为c)有一个函数void foo(),并且您使用实例c来调用foo,如下所示:
c.foo();
实际调用的是:
foo(c);
而调用静态函数void foo2():
Class.foo2();
就像它看起来那样被调用。
使用实例调用静态函数说明用户可能不太确定自己在做什么。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接