这是我的作业问题:
为“Clock”类编写类声明。它应该包含小时,分钟,秒(所有整数)的实例变量。它还应该有一个toString()方法,以下面显示的格式显示时间。写一个单独的“ClockDriver”类来a)创建一个时钟实例,b)设置时钟的小时,分钟和秒,以及c)使用getTime()显示时钟的时间。使用第36页的Dog类示例作为指南。示例输出如下所示:
时间是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);
line通过实例引用访问静态成员。具体来说,
temp.format
位。
所以我的问题是:
1。)为什么不一定鼓励通过实例引用访问静态成员?
2。)是否有更好的方法将它放在一起,以便我不通过实例引用访问静态成员?
提前致谢!
答案 0 :(得分:38)
静态方法属于类本身,而不属于任何实例。虽然您可以从类的实例调用static
方法,但您不必使用该类的实例,也不应该使用该类的实例。这可能令人困惑,因为看起来该方法不是static
,即使它是static
。
调用static
方法的最佳和最清晰的方法是使用类名本身而不是类的实例来调用方法:
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
您根本不需要temp
实例。
答案 1 :(得分:2)
请注意,如果某个类的实例,我们称之为c,有一个函数void foo()
,并且您使用实例c
来调用foo
,如下所示:
c.foo();
实际上叫做的是:
foo(c);
调用静态函数void foo2():
Class.foo2();
就像看起来一样被调用。
使用实例调用静态函数表示用户可能不确定他在做什么。
答案 2 :(得分:0)
您实际上不应该使用字符串temp
。你应该把它称为String.format
。要回答你的问题,这很令人困惑,因为这个电话实际上并没有看temp
。