There's 10 million articles and docs out there on what Java classloaders are, and how/*why* to write your own...but they all seem to be assuming some things that I can't find a simple answer to!
I understand the job of the classloader: to read bytecode and construct an object from it. Different classloaders do this differently, etc.
But having never had to code against a class loader API in my own code, and never having to write one of my own, I'm having enormous difficulty understanding when a ClassLoader
's own code actually fires.
For instance:
public static void main(String[] args) {
Fizz fizz = new Fizz();
fuzz.buzz();
}
Here, we have a Fizz
object. Before a Fizz
can be instantiated, we need a class loader to kick in and load Fizz.class
into its cache. Where and when is this happening?!?! It's not explicitly in my code so it must implicitly be somewhere in the JRE...?
Tangential to that question, if I write my own classloader, say, WidgetClassLoader
and want to configure it to load either all my application's classes, or perhaps just my Fizz.class
, how do I "tie" this WidgetClassLoader
into my application so that it knows which classloader to use? Would my code need to explicitly call this classloader or would it be implicit like the first example? Thanks in advance!