When do Java class loaders engage?
===

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!