Bonsoir,
[EDIT]je vire une partie de la réponse car Hervé m'a devancé [/EDIT]
Je te conseil cet article qui te permettra de voir comment sont "invoquée" les méthodes dans un programme Java; comme je viens de le faire.
http://www.ibm.com/developerworks/ib...ggar_bytecode/
Amuse toi à désassembler du bytecode sur des exemples que tu écris; je pense que les "invokevirtual", "invokespecial" te donneront une idée de comment ça se passe. Tu verras (et ce même en éditant en bloc note du byte code) que les classes, méthodes et attributs sont chargées, appelés et manipulés via leurs noms.
Ensuite, il faut bien avoir conscience que Java repose sur une machine virtuelle (comme le dit Hervé avec plus de précision du coup)
Si tu veux approfondir, je pense que jeter un oeil à ce qui suit te donnera une idée de ce qu'utilise la machine virtuelle :
java.lang.Class / java.lang.Object / java.reflect.Method / java.lang.ClassLoader
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html
La partie réflexion te montrera la grosse différence avec C++ et surtout la partie magique de java... Le ClassLoader t'en dira plus sur comment fonctionne le chargement des classes.
Tu peux aussi jeter un oeil aux JNI, ce qui te rapprocheras des entrailles de la machine virtuelle :
http://www.iut-orsay.fr/dptinfo/Peda...a/javaJni.html
Alors je me dis, est-ce que c'est cela que fait le compilateur Java, ou pas ?
Tu devrais avoir vu le rôle limité du compilateur (javac) en terme d'optimisation des appels de méthode, face à celui de l'interpréteur (java)
bye
Partager