A have a Java code as:
public class Hello
{
public void print()
{
System.out.println("Hi");
}
}
I compiled it and created a Hello.class. I added it to a Jar file hello.jar as:
$jar -cvf hello.jar Hello.class
I wrote one more program as:
class Test1
{
public static void main(String[] args)
{
new Hello().print();
System.out.println(Hello.class.getClassLoader());
}
}
And deleted Hello.class from current directory.
Then I copied hello.jar in extension class path. My program works fine as:
$sudo cp hello.jar /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext
$ java Test1
Hi
sun.misc.Launcher$ExtClassLoader@28d93b30
$
If I delete hello.jar from extension class path and copy it in boot strap class path (usr/lib/jvm/java-8-openjdk-amd64/jre/lib/) which contains rt.jar too, then my program is not working.
$ java Test1
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
at Test1.main(Test1.java:5)
Caused by: java.lang.ClassNotFoundException: Hello
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
According to my knowledge all jar files in bootstrap or extension class loader can be used in program. Why does Java throw that Exception if it's correct? If I am not correct then please guide me.