24

这是我的家庭作业问题:


为“时钟”类编写类声明。它应该具有小时、分钟、秒(所有整数)的实例变量。它还应该有一个 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);

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

temp.format

少量。

所以我的问题是:

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

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

提前致谢!

4

3 回答 3

43

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

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

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

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

于 2013-08-20T21:08:36.340 回答
2

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

c.foo();

实际调用的是:

foo(c);

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

Class.foo2();

就像它看起来一样被调用。

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

于 2013-08-20T21:29:14.620 回答
0

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

于 2013-08-20T21:08:29.073 回答