FileDocCategorySizeDatePackage
ClassLoaderDemo0.javaAPI DocExample2569Wed Mar 14 21:06:02 GMT 2001None

ClassLoaderDemo0

public class ClassLoaderDemo0 extends ClassLoader
Simple Demonstration of a ClassLoader WILL NOT COMPILE OUT OF THE BOX -- WILL ONLY WORK AS PART OF THE CLASSLOADER EXERCISE. See ClassLoader1 for a working version.

Fields Summary
protected Hashtable
cache
The Hashtable to keep track of classes, to avoid re-loading them
byte[]
data
INSERT HERE THE RESULT OF DUMPING DEMO.CLASS
int
dataLength
Constructors Summary
Methods Summary
private byte[]genClassData(java.lang.String name)
"load", that is, generate, the data for the class


	          

	          
	    
		if (dataLength != data.length)	// EXPECT COMPILE ERROR in javasrc
			throw new IllegalArgumentException(
				"data corrupt, " + dataLength + "!=" + data.length);
		byte[] bd = new byte[data.length];
		for (int i=0; i<bd.length; i++)
			bd[i] = (byte)data[i];
		return bd;
	
public synchronized java.lang.ClassloadClass(java.lang.String name, boolean resolve)

 
		Class c = (Class)cache.get(name);
		if (c == null) {
			// System.out.println("loadClass: About to genClassData " + name);
			byte mydata[] = genClassData(name);
			// System.out.println("loadClass: About to defineClass " + name);
			c = defineClass(name, mydata, 0, mydata.length);
			System.out.println("loadClass: storing " + name + " in cache.");
			cache.put(name, c);
		} else
			System.out.println("loadClass: found " + name + " in cache.");
		if (resolve) {
			System.out.println("loadClass: About to resolveClass " + name);
			resolveClass(c);
		}
		return c;
	
public static voidmain(java.lang.String[] argv)

		System.out.println("ClassLoaderDemo starting");
		ClassLoaderDemo0 loader = new ClassLoaderDemo0();
		Class c = null;
		Object demo;
		try {
			/* Load the "Demo" class from memory */

			System.out.println("About to load class  Demo");
			c = loader.loadClass("Demo", true);
			System.out.println("About to instantiate class Demo");
			demo = c.newInstance();
			System.out.println("Got Demo class loaded: " + demo);

			/* Now try to call a method */

			Method mi = c.getMethod("test", null);
			mi.invoke(demo, null);

		} catch (InvocationTargetException e) {
			// The invoked method threw an exception. We get it
			// wrapped up inside another exception, hence the
			// extra call here:
			e.getTargetException().printStackTrace();
			System.out.println("Could not run test method");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("Could not run test method");
		}