2013-08-20 10 views
13

Ecco la mia domanda compiti:Java aiuto per i compiti (Accesso Statico membro tramite istanza di riferimento)


Scrivi una dichiarazione di classe per un “Orologio” di classe. Dovrebbe avere variabili di istanza per ore, minuti, secondi (tutti gli interi). Dovrebbe anche avere un metodo toString() per mostrare l'ora nel formato mostrato di seguito. Scrivi una classe "ClockDriver" separata su a) crea un'istanza di un orologio, b) imposta le ore, i minuti e i secondi per l'orologio, e c) mostra l'ora dell'orologio usando getTime(). Utilizzare l'esempio di classe Dog a pagina 36 come guida. Sample fuori è la seguente:

Il tempo è 3:45:00

// non preoccupatevi se non è possibile ottenere entrambi gli zeri in

// il secondo campo. Questo è un problema di formattazione

// ci occuperemo in seguito


Ecco la mia classe Orologio:

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 

E qui è la mia classe 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 

Anche se compila bene e funziona bene, ottengo quello che penso sia un avvertimento di IDE che dice che il mio

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

la linea accede a un membro statico tramite riferimento di istanza. Nello specifico, lo

temp.format 

bit.

Quindi le mie domande sono:

1.) Perché l'accesso a un membro statico tramite riferimento esempio non necessariamente incoraggiati?

2.) Esiste un modo migliore per mettere insieme questo in modo che non acceda a un membro statico tramite riferimento di istanza?

Grazie in anticipo!

+7

+1 per il tuo nome utente. –

risposta

30

I metodi statici appartengono alla classe stessa, non a nessuna istanza. Mentre è possibile chiamare un metodo static da un'istanza della classe, non è necessario utilizzare un'istanza della classe e non si dovrebbe. Può essere fonte di confusione, perché sembra che il metodo non sia static, anche se è static.

Il modo migliore e più chiaro per chiamare un metodo static è quello di utilizzare il nome della classe per sé, non è un'istanza della classe, per chiamare il metodo:

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

E non c'è bisogno l'istanza temp affatto.

+0

Ok, grazie! Stavo avendo problemi e il mio insegnante ha lanciato uno snippet a modo mio che utilizzava temp. Immagino che non si aspettasse che io capisca come ottenere la formattazione giusta, motivo per cui non ha funzionato. –

0

In realtà non si dovrebbe usare la stringa temp. Dovresti chiamarlo come String.format. Per rispondere alla tua domanda, è confuso, dal momento che la chiamata in realtà non guarda a temp.

1

Tenete presente che se un'istanza di una certa classe, consente di chiamare C, ha una funzione, void foo(), e si utilizza l'istanza c chiamare foo in questo modo:

c.foo();

quello che in realtà chiamata è:

foo(c);

durante la chiamata una funzione statica foo2 void():

Class.foo2();

viene chiamato così come sembra.

Chiamare una funzione statica utilizzando un'istanza indica un utente che probabilmente non è sicuro di ciò che sta facendo.

Problemi correlati