Wir alle sind es gewohnt, Java als relativ statische Sprache zu betrachten. Wir schreiben Code, dieser wird compiliert und steht dann über den ClassLoader zur Ausführung zur Verfügung. In anderen Sprachen ist es üblich, ein Programm auch nach dem initialen Laden noch zu verändern, man denke nur an JavaScript oder die Metaprogrammierung von Ruby und Groovy. Wir können das im begrenzten Rahmen auch, mittels Reflection, Virtual Proxies oder den neuen MethodHandle-APIs. Einige Ansätze gehen sogar noch viel weiter, wie JRebel immer wieder beeindruckend beweist.
Michael Hunger