java - Difference in functionality between instance created by classloader and new keyword -
i little bit confused in class loading , initializing concept
1: class.forname("test.employee").newinstance(); 2: classloader.getsystemclassloader().loadclass("test.employee").newinstance(); 3: new test.employee();
every line of above written code creating instance of employee
class don't understand difference in 3 methods.
the core differences between 3 approaches come down how classes located @ runtime , can them.
for example...
class.forname("test.employee").newinstance();
will use current class's classloader
search class named employee
in test
package. allow discover classes might not available @ compile time , loaded dynamically same class loader context. search it's parent class loaders if class not found within current context...
classloader.getsystemclassloader().loadclass("test.employee").newinstance();
this use "system" classloader
, typically 1 launched main application.
using either of these 2 methods great way generate dynamic applications actual implementation of class
not known @ compile type. problem here can affect visibility , restrict can loaded classes.
for example, while may have loaded test.employee
class , created instance of it, unless have reference test.employee
@ compile time, want able cast it. typically interface
s come in handy.
equally, create own classloader
instance , load classes or jars @ runtime provide, example, plugins, factories or managers implementation unknown @ compile time. functionality these would, typically, described through use of interface
s.
examples include java.awt.toolkit
, jdbc java.sql.driver
at end of day, classloader
mechanism providing means class file can loaded , instantiated current jvm. new
keyword similar job, results pre-determined @ compile time
classloader
s powerful feature , provide lot of functionality, can down right confusion, way chain together
you might find...
of help
Comments
Post a Comment