I’m currently getting to know Java and OSGi, so I’ve read a few books. In one particular book the class loading is described.
You can download it (free and legal) from the authors page (Neil Bartlett):
OSGi Book
On page 9 and 10 are this pictures:
alt text http://img265.imageshack.us/img265/4127/picture1qct.pngalt text http://img297.imageshack.us/img297/594/picture2yv.png
It seems like there is the possibility that our class “Foo” won’t use the class “Bar” of foobar.jar, but instead class “Bar” from naughty.jar.
Because of the flat and global structure of the Java classpath this could be, but as far as I know you would define a package from where you want to import a certain class:
import foobar.Bar
This should prevent loading the wrong class, shouldn’t it? Of course assuming that the package is called “foobar”.
The
importstatement has nothing to do with classloading – it just allows you to use short nameBarinstead of the fully qualifiedfoobar.Bar. If bothfoobar.jarandnaughty.jarcontain class with fully qualified namefoobar.Bar, classloader will load the class from the from the first jar file with required class on the classpath.