I metodi statici in Java vengono sempre risolti al momento della compilazione?I metodi statici in Java vengono sempre risolti al momento della compilazione?
risposta
risposta breve: sì
non ero in grado di trovare la sezione esatta della Java Language Specification. Per favore aiuto. :)
Sì, ma se il metodo statico è stato rimosso dal runtime verrà chiamato il metodo di corrispondenza nella classe base (nome e firma devono corrispondere esattamente al metodo originale dal momento della compilazione e il metodo deve essere accessibile da JVM regole specifiche).
Per chiarire, prendere in considerazione il codice chiamando:
Derived.fn();
E il seguente codice di chiamata:
class Base {
public static void fn() {
System.err.println("Base");
}
}
class Derived extends Base {
public static void fn() {
System.err.println("Derived");
}
}
Stampe Derived
.
Ora, compilo tutto. Quindi ricompilare solo Derivato cambiato a:
class Derived extends Base {
}
Stampe Base
.
Forse allora io ricompilare solo derivati cambiato a:
class Derived {
}
genera un errore.
"Rimosso dal runtime"? Cosa significa? –
Suppongo che significhi: se una classe è compilata per chiamare Sub.x(), allora il metodo x() viene cancellato da Sub ma la classe chiamante non viene ricompilata, in fase di esecuzione Base.x() verrà invocato se esiste. – erickson
+1 probabilmente questo è l'approccio giusto per questa domanda – dfa
diverse citazioni:
"Quando il compilatore compila quella classe decide al momento della compilazione quale metodo esatto viene chiamata per ogni chiamata di metodo statico (questa è la grande differenza di metodo non statico chiama: il metodo esatto da chiamato è deciso solo in fase di esecuzione in questi casi). "
"La chiamata di metodi statici dipende sempre solo dal tipo di tempo di compilazione su cui è chiamato."
Risposta corretta per la domanda, ma la citazione sui metodi non statici decisa solo in fase di esecuzione non è corretta. Solo i metodi sottoposti a override vengono decisi in fase di esecuzione, altri vengono determinati in fase di compilazione, anche se sottoposti a override. – Robin
@Robin: la citazione non è mia, buon punto però :) –
Il link sembra morto –
- 1. Disabilita la registrazione in Java al momento della compilazione
- 2. Perché Java associa le variabili al momento della compilazione?
- 3. Perché i simboli di una libreria condivisa non vengono risolti al momento del collegamento?
- 4. Come testare UIViewControllers al momento della compilazione?
- 5. Genera numeri univoci al momento della compilazione
- 6. Rileva C# versione al momento della compilazione
- 7. ID tipo C++ al momento della compilazione
- 8. Inizializzatori statici e metodi statici in Java
- 9. stampa sizeof (T) al momento della compilazione
- 10. Cosa determina il processo in base al quale vengono risolti i metodi non implementati?
- 11. Java - Metodi statici generici
- 12. I metodi Java nativi equivalgono ai metodi Java statici?
- 13. I metodi statici sono sempre tenuti in memoria?
- 14. Leggere un file in una stringa al momento della compilazione
- 15. Scala - Imposizione della dimensione del vettore al momento della compilazione
- 16. Come si generano staticamente dati float al momento della compilazione?
- 17. Determina la lunghezza della stringa netta al momento della compilazione
- 18. Convalida il contenuto di std :: initializer_list al momento della compilazione
- 19. Metodi statici nell'interfaccia java
- 20. Metodi di creazione di fabbrica sempre statici?
- 21. Che cosa significa ridefinire i metodi statici in Java?
- 22. Devo sempre rendere statici i miei metodi laddove possibile?
- 23. I metodi di classe Python vengono sempre eseguiti due volte
- 24. display intero al momento della compilazione a static_assert()
- 25. catch std :: allocazioni di funzioni al momento della compilazione
- 26. Come vengono risolti i simboli esterni?
- 27. Rileva la presenza del modello al momento della compilazione
- 28. Forza una stretta coercizione implicita al momento della compilazione
- 29. dedurre intero spazio vettore al momento della compilazione
- 30. intermediario - percorso risorsa per CDN al momento della compilazione
per favore, c'è qualche caso oscuro quando la regola non si applica? –
Un'altra breve risposta: No. –
@Joao: nel modificatore statico Java significa esattamente "in fase di compilazione". Il metodo/variabile è associato staticamente al nome della classe. Nessuna eccezione. – dfa