JavaRush /Java Blog /Random-IT /Differenze tra associazione anticipata e tardiva in Java

Differenze tra associazione anticipata e tardiva in Java

Pubblicato nel gruppo Random-IT
Per comprendere la differenza tra l'associazione anticipata (statica) e tardiva (dinamica) in Java, è necessario prima capire cos'è l'associazione . Collegamento significa che esiste una connessione tra il collegamento e il codice. Ad esempio, una variabile a cui fai riferimento è associata al codice in cui è definita. Allo stesso modo, il metodo chiamato è legato alla posizione nel codice in cui è definito.
Differenze tra associazione anticipata e tardiva in Java - 1
Esistono due tipi di associazione di metodi nel linguaggio Java: associazione anticipata (chiamata anche statica) e associazione tardiva (rispettivamente dinamica) . Chiamare un metodo in Java significa che il metodo è legato a un codice specifico, in fase di compilazione o in fase di esecuzione, quando il programma viene eseguito e gli oggetti vengono creati. Come suggerisce il nome, il collegamento statico è di natura più statica poiché avviene in fase di compilazione, il che significa che il codice "sa" quale metodo chiamare dopo aver compilato il codice sorgente Java nei file di classe. E poiché si riferisce alla fase iniziale del ciclo di vita del programma, viene anche chiamato rilegatura anticipata. D'altra parte, il collegamento dinamico avviene in fase di runtime, dopo che il programma è stato eseguito dalla Java Virtual Machine. In questo caso, quale metodo chiamare è determinato dall'oggetto specifico, quindi le informazioni non sono disponibili in fase di compilazione perché gli oggetti vengono creati in fase di esecuzione. E poiché ciò avviene in una fase avanzata del ciclo di vita del programma, in Java viene chiamato associazione tardiva.
Quindi, la differenza fondamentale tra il collegamento statico e quello dinamico in Java è che il primo avviene precocemente, in fase di compilazione, in base al tipo della variabile di riferimento, e il secondo avviene successivamente, in fase di esecuzione, utilizzando oggetti concreti.
Diamo un'occhiata ad alcune altre differenze per capirlo meglio e anche per essere in grado di rispondere a questa domanda molto popolare posta nelle interviste Java.

Associazione anticipata e tardiva in Java

Esistono molte differenze tra l'associazione statica e dinamica in Java, ma la più importante è il modo in cui la JVM le utilizza. Ti sei mai chiesto come fa la JVM a decidere quale metodo chiamare quando nell'ambito è presente più di un metodo con lo stesso nome? Se hai mai utilizzato l'overload o l'override dei metodi, sai che in Java puoi avere più metodi con lo stesso nome. Nel caso di Java, la JVM utilizza sia il collegamento statico che quello dinamico per selezionare il metodo desiderato.

Esempio di associazione statica e dinamica in Java

In questo programma, vedrai che l'associazione dei metodi virtuali non avviene in fase di compilazione utilizzando l'associazione statica, poiché questo chiamerebbe un metodo dalla superclasse, come accade con i metodi statici che vengono associati in anticipo. Se viene chiamato un metodo da una sottoclasse, è stato utilizzato un oggetto specifico per associare la funzione in fase di esecuzione e quindi l'associazione dinamica viene utilizzata per associare le funzioni virtuali.
public class Main {
  public static void main(String[] args) {

    // Пример статического и динамического связывания в Java
    Insurance current = new CarInsurance();

    // Динамическое связывание на основе an object
    int premium = current.premium();

    // Статическое связывание на основе класса
    String category = current.category();

    System.out.println("premium : " + premium);
    System.out.println("category : " + category);
  }
}

class Insurance{
  public static final int LOW = 100;

  public int premium(){
    return LOW;
  }

  public static String category(){
    return "Insurance";
  }

}

class CarInsurance extends Insurance{
  public static final int HIGH = 200;

  public int premium(){
    return HIGH;
  }

  public static String category(){
    return "Car Insurance";
  }

}
Результаты выполнения:

premium : 200
category : Insurance
Come puoi vedere, una chiamata al metodo premium()ha comportato l'esecuzione di un metodo dalla sottoclasse, mentre una chiamata al metodo category()ha comportato l'esecuzione di un metodo della superclasse. Questo perché premium()- è un metodo virtuale, che viene risolto utilizzando l'associazione tardiva, mentre category()- è un metodo statico, che viene risolto utilizzando l'associazione statica in fase di compilazione in base al nome della classe.
Interessato a leggere su Java? Unisciti al gruppo di sviluppatori Java !

Differenze tra associazione anticipata e tardiva in Java

Ora che sai come Java associa le chiamate ai metodi e come funziona l'associazione statica e dinamica, ricapitoliamo le differenze chiave tra l'associazione anticipata e tardiva in Java:
  1. Il collegamento statico avviene in fase di compilazione, mentre il collegamento dinamico avviene in fase di esecuzione.

  2. Poiché il collegamento statico avviene all'inizio del ciclo di vita di un programma, viene chiamato collegamento anticipato. Allo stesso modo, l'associazione dinamica è anche chiamata associazione tardiva perché avviene più tardi nell'esecuzione del programma.

  3. L'associazione statica viene utilizzata nel linguaggio Java per risolvere i metodi sovraccarichi mentre l'associazione dinamica viene utilizzata nel linguaggio Java per risolvere i metodi sovrascritti.

  4. Allo stesso modo, i metodi privati, statici e terminali vengono risolti utilizzando l'associazione statica perché non possono essere sovrascritti, mentre tutti i metodi virtuali vengono risolti utilizzando l'associazione dinamica.

  5. Nel caso dell'associazione statica, non vengono utilizzati oggetti concreti, ma informazioni sul tipo, ovvero il tipo della variabile di riferimento viene utilizzato per scoprire il metodo desiderato. D'altra parte, l'associazione dinamica utilizza un oggetto specifico per trovare il metodo desiderato in Java.
Ecco un buon esercizio basato sui concetti di associazione statica e dinamica in Java. Puoi rispondere alla domanda: "Cosa verrà restituito quando viene eseguito il seguente programma?"
Differenze tra associazione anticipata e tardiva in Java - 2
Cosa produrrà questo programma? Collection, SetO HashSet? Questo è tutto ciò che volevamo dirti sulle differenze tra l' associazione iniziale (statica) e tardiva (dinamica) in Java. Questa è una delle migliori domande per un'intervista telefonica Java perché offre numerose opportunità per testare la profondità delle conoscenze del candidato. Ricordare sempre che i metodi private , statici e finali vengono associati utilizzando il collegamento statico , mentre i metodi virtuali vengono associati utilizzando il collegamento dinamico . Allo stesso modo, il miglior esempio di associazione statica è l'overload del metodo, mentre l'override è dinamico. Fonte
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION