# Class BshClassLoader

java.lang.Object
java.lang.ClassLoader
java.security.SecureClassLoader
java.net.URLClassLoader
bsh.classpath.BshClassLoader

All Implemented Interfaces:
  `Closeable, AutoCloseable`

Direct Known Subclasses:
  `DiscreteFilesClassLoader`

public class BshClassLoader extends URLClassLoader
One of the things BshClassLoader does is to address a deficiency in URLClassLoader that prevents us from specifying individual classes via URLs.

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`BshClassLoader(BshClassManager classManager)`
For use by children
``
`BshClassLoader(BshClassManager classManager, BshClassPath bcp)`
``
`BshClassLoader(BshClassManager classManager, URL[] bases)`

## Method Summary

Modifier and Type
Method
Description
`void`
`addURL(URL url)`
`protected Class`
`findClass(String name)`
Find the correct source for the class...
`Class`
`loadClass(String name, boolean resolve)`
This modification allows us to reload classes which are in the Java VM user classpath.

### Methods inherited from class URLClassLoader

`close, definePackage, findResource, findResources, getPermissions, getResourceAsStream, getURLs, newInstance, newInstance`

### Methods inherited from class SecureClassLoader

`defineClass, defineClass`

### Methods inherited from class ClassLoader

`clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### BshClassLoader

public BshClassLoader(BshClassManager classManager, URL[] bases)

Parameters:
  `bases` - URLs JARClassLoader seems to require absolute paths

### BshClassLoader

public BshClassLoader(BshClassManager classManager, BshClassPath bcp)

Parameters:
  `bases` - URLs JARClassLoader seems to require absolute paths

### BshClassLoader

protected BshClassLoader(BshClassManager classManager)
For use by children

Parameters:
  `bases` - URLs JARClassLoader seems to require absolute paths

## Method Details

### addURL

public void addURL(URL url)

Overrides:
  `addURL` in class `URLClassLoader`

### loadClass

public Class loadClass(String name, boolean resolve) throws ClassNotFoundException
This modification allows us to reload classes which are in the Java VM user classpath. We search first rather than delegate to the parent classloader (or bootstrap path) first. An exception is for BeanShell core classes which are always loaded from the same classloader as the interpreter.

Overrides:
  `loadClass` in class `ClassLoader`
Throws:
  `ClassNotFoundException`

### findClass

protected Class findClass(String name) throws ClassNotFoundException
Find the correct source for the class... Try designated loader if any Try our URLClassLoader paths if any Try base loader if any Try system ???

Overrides:
  `findClass` in class `URLClassLoader`
Throws:
  `ClassNotFoundException`