Delta(Canard.java) => Delta(Mare.class)
Mise en place
Fichier Canard.java
Code:
1 2 3 4
| public class Canard
{
public static final String CRI = "Coin ! Coin !";
} |
Fichier Mare.java
Code:
1 2 3 4 5 6
| public class Mare
{
public static void main(String[] arguments) {
System.out.println("Le canard dit : " + Canard.CRI);
}
} |
Manipulation
1) javac Mare.java
-> Les deux fichiers Java sont compilés.
2) java Mare
-> Affiche "Le canard dit : Coin ! Coin !"
4) Changement de "Coin ! Coin !" en "Miaou !" dans le fichier Canard.java.
5) javac Canard.java
-> Seul Canard.java est compilé.
6) java Mare
-> Affiche "Le canard dit : Coin ! Coin !"
7) rm Mare.class
-> Affiche "Le canard dit : Coin ! Coin !"
Conclusion :
La constante CRI n'est visiblement par référencée, mais sa valeur directement "embarquée" dans les classes qui l'utilisent (ici la Mare.java). A ma connaissance, il s'agit du seul cas où une modification dans un fichier *.java se répercute sur d'autres *.class que le sien (ou les siens dans le cas de classes internes).
Question :
Existe-t-il d'autres cas de figures et, idéalement, un principe général ?