coolness

Godmar Back gback@cs.utah.edu
Fri Mar 12 09:20:00 GMT 1999


> 
> Tom Tromey wrote:
> > 
> > >>>>> "Jeff" == Jeff Sturm <jsturm@sigma6.com> writes:
> > 
> > Jeff> What needs to work in gcj is Class.forName("...") which is
> > Jeff> scattered all over in most java code, including the Sun java.*
> > Jeff> classes, and most JDBC programs (consider how JDBC drivers are
> > Jeff> loaded dynamically).
> > 
> > When you write this, do you mean that it is a common idiom to pass a
> > constant string to Class.forName()?  (I'm afraid most of the Java code
> > I've read is code written here.)
> 
> Yes.  Sometimes it is useful to get a reference to some class before any
> instances are created:
> 
>   try {
>     Class objClass = Class.forName("java.lang.Object");
>   } catch (ClassNotFoundException ex) {
>     ...
>   }
> 

>From my experience, a much more common use of Class.forName is with
non-constant strings that are composed at runtime.  
For instance, it may be used like so:

	Class beaninfo = Class.forName(beanpackage + classname + "Info");

where beanpackage may be "kaffe.bean.info.", and classname is a variable.

> In 1.1 javac introduced a new syntax:
> 
>   Class objClass = java.lang.Object.class;
> 
> but javac still generates a call to Class.forName(...) in the bytecode. 
> The new syntax is just a compiler trick, not a VM feature.
> 

However, if egcs compiled from a .java source, these guys would be 
absolutely no problem: egcs is not obliged to create Class.forName(...) calls
like javac does --- at least not as long as ClassLoaders are kept out of 
the picture.

	- Godmar



More information about the Java mailing list