Is there a guarantee that (the default, system) Java class loader doesn't attempt to load classes that aren't referred to in the code being run? A couple of examples of what I mean:
- I'm using a
framework.jar
which I know to contain references to anotherlibrary.jar
's classes in it, but I'm using only such part of the framework that doesn't contain those references. Is it safe to leavelibrary.jar
out? - Static blocks are run when a class is first loaded. If no running code contains references to a specific class, is it sure that it's static block is not run?
Quickly testing it seems to work as assumed above, and it wouldn't make much sense to load unused classes anyway, but is there any guarantee on this?
Addition: It seems that my "static blocks are run when a class is first loaded" statement above is somewhat incorrect. It's definitely possible to load classes (one thing) without running them (another thing). So I'm interested in both cases; guarantees about classes not getting loaded, and not getting run.