Mise en place

Fichier Canard.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public class Canard
{
	public static final String CRI = "Coin ! Coin !";
}
Fichier Mare.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?