pabrantes said: Knowing how bytecode works isn't actually necessary for Java developers, although knowing it, or at least, knowing how to interact with it gives news possibilities in the developing process.
Well, I understand that many people have that line of thought but it's more or less like saying that if you start editing your native binaries you open the possibility of tailoring them in very imaginative ways … like hacking a password protection

. You can do amazing things at that level but do you really should/want to be doing that? In my opinion you should focus on the goals of bytecode injection and why tools like javassist exist. Stay on the light side!
pabrantes said: The idea is simple, instead of parsing all classes at build time, each class is injected on demand at runtime when is requested to the class loader to load it.
That is actually quite interesting but, once again, lets focus on the ends instead of focusing on the means. We want to change classes in a way that is not supported by the Java language, nor natively by the JVM, when they are loaded. But why? Why during the loading phase?
In my opinion that tells us something about the Java language:
- it's not expressive enough to allow some programmers to describe what they want to do or
- the Java language is used by some crazy programmers.
That last point being obviously right I would have to go with the first. What do you think? Is the language limited in important ways or is it fine as a base generic language? More specific goals should seek their own ways of being described instead of this assembly language?
PS: I've remembered that while looking at GWT I've noticed that the toolkit regards HTML + Javascript (DHTML) as binary code. The problem is that many people spend they whole day programming in DHTML and they say "The code produced by GWT is completely obfuscated". Off course it is! Your looking to assembly code. The point is, bytecode is assembly. Hell! In some cases even Java is assembly. You should always be working above the compiler (compiler compiles down

)