usar sirve settitle que para codigo java instance static-members

java - sirve - settitle jframe



Ayuda con la tarea de Java(Acceso al miembro estático a través de referencia de instancia) (3)

En realidad no deberías usar la cadena temp . Deberías llamarlo como String.format . Para responder a su pregunta, es confuso, ya que la llamada en realidad no se ve en temp .

Aquí está mi pregunta de tarea:

Escribe una declaración de clase para una clase de "Reloj". Debe tener variables de instancia por horas, minutos, segundos (todos los enteros). También debe tener un método toString () para mostrar la hora en el formato que se muestra a continuación. Escriba una clase de “ClockDriver” separada para a) crear una instancia de un reloj, b) configurar las horas, los minutos y los segundos para el reloj, yc) mostrar la hora del reloj usando getTime (). Use el ejemplo de la clase de perros en la página 36 como guía. La muestra de salida se muestra a continuación:

El tiempo es 3:45:00

// no te preocupes si no puedes meter los dos ceros

// el segundo campo. Ese es un problema de formato

// nos ocuparemos luego

Aquí está mi clase de reloj:

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

Y aquí está mi clase 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

Aunque se compila bien y funciona bien, recibo lo que creo que es una advertencia de IDE que dice que mi

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

La línea está accediendo a un miembro estático a través de la referencia de instancia. Específicamente, la

temp.format

poco.

Así que mis preguntas son:

1.) ¿Por qué no se recomienda el acceso a un miembro estático a través de la referencia de instancia?

2.) ¿Hay una mejor manera de armar esto para que no acceda a un miembro estático a través de una referencia de instancia?

¡Gracias por adelantado!


Los métodos estáticos pertenecen a la clase en sí, no a ninguna instancia. Si bien puede llamar a un método static desde una instancia de la clase, no tiene que usar una instancia de la clase y no debe hacerlo. Puede ser confuso, porque parece que el método no es static , a pesar de que es static .

La forma mejor y más clara de llamar a un método static es usar el nombre de la clase en sí, no una instancia de la clase, para llamar al método:

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

Y no necesitas la instancia temp en absoluto.


Tenga en cuenta que si una instancia de una determinada clase, llamémosla c, tiene una función, void foo() , y usted usa la instancia c para llamar a foo así:

c.foo();

lo que en realidad se llama es:

foo(c);

al llamar a una función estática void foo2 ():

Class.foo2();

Se llama tal y como se ve.

Llamar a una función estática usando una instancia indica que un usuario probablemente no está seguro de lo que está haciendo.