Подтвердить что ты не робот

Справка по домашней задаче Java (доступ к статическому члену с помощью справки об экземпляре)

Вот мой вопрос о домашнем задании:


Напишите объявление класса для класса "Часы". Он должен иметь переменные экземпляра для часов, минут, секунд (все целые числа). Он также должен иметь метод toString() для отображения времени в формате, показанном ниже. Напишите отдельный класс "ClockDriver": a) создайте экземпляр часов, b) установите часы, минуты и секунды для часов и c) покажите время часов с помощью getTime(). Используйте пример класса Dog на стр. 36 в качестве руководства. Образец показан ниже:

Время 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

бит.

Итак, мои вопросы:

1.) Почему обращение к статическому члену через ссылку экземпляра не обязательно рекомендуется?

2.) Есть ли лучший способ объединить это, чтобы я не получал доступ к статическому элементу через ссылку экземпляра?

Спасибо заранее!

4b9b3361

Ответ 1

Статические методы относятся к самому классу, а не к любому экземпляру. Хотя вы можете вызвать метод static из экземпляра класса, вам не нужно использовать экземпляр класса, и вы не должны. Это может сбивать с толку, потому что похоже, что метод не static, хотя он static.

Лучшим и ясным способом вызова метода static является использование самого имени класса, а не экземпляра класса, для вызова метода:

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

И вам вообще не нужен экземпляр temp.

Ответ 2

Имейте в виду, что если экземпляр определенного класса, позвонив ему c, имеет функцию void foo(), и вы используете экземпляр c для вызова foo следующим образом:

c.foo();

то, что на самом деле называется:

foo(c);

при вызове статической функции void foo2():

Class.foo2();

вызывается так, как он выглядит.

Вызов статической функции с использованием экземпляра указывает на пользователя, который, вероятно, не уверен, что он делает.

Ответ 3

На самом деле вы не должны использовать строку temp. Вы должны называть его String.format. Чтобы ответить на ваш вопрос, это запутывает, так как вызов на самом деле не смотрит на temp.