import java.util.HashMap;
public class NormalnyLadowaczKlas extends ClassLoader {
     HashMap zaladowaneKlasy = new HashMap();
     protected Class loadClass(String name, boolean resolve)
          throws ClassNotFoundException {
          try {
                Class ks = findSystemClass(name);
                if (ks != null)
                     return ks;
          } catch(ClassNotFoundException e) {}

          Class k = (Class)zaladowaneKlasy.get(name);
          if (k != null)
               return k;

          byte[] daneKlasy = zaladujDaneKlasy(name);
          if (daneKlasy == null)
               throw new ClassNotFoundException(name);
          k = defineClass(name, daneKlasy, 0, daneKlasy.length);
          if (k == null)
               throw new ClassNotFoundException(name);

          zaladowaneKlasy.put(name, k);

          if (resolve) resolveClass(k);
               return k;
      }

      private byte[] zaladujDaneKlasy (String nazwa) {
           int roboczy;
           ByteArrayOutputStream wynik = new ByteArrayOutputStream();
           final int EOF = -1;
           nazwa = nazwa + ".class";      // tworzy nowy obiekt klasy String
           try {
                FileInputStream plik = new FileInputStream(nazwa);
                while ((roboczy = plik.read()) != EOF)
                     wynik.write(roboczy);
           } catch (IOException e) {}
           return wynik.toByteArray();
     }
}
