package java.lang;
import java.io.Serializable;
import java.io.InputStream;
import java.lang.reflect.*;
import java.security.*;
public final class Class implements Serializable
{
public static native Class forName (String className)
throws ClassNotFoundException;
public static native Class forName (String className, boolean initialize,
ClassLoader loader)
throws ClassNotFoundException;
public native Class[] getClasses ();
public native ClassLoader getClassLoader ();
public native Class getComponentType ();
public native Constructor getConstructor (Class[] parameterTypes)
throws NoSuchMethodException, SecurityException;
private native Constructor[] _getConstructors (boolean declared)
throws SecurityException;
public Constructor[] getConstructors () throws SecurityException
{
return _getConstructors (false);
}
public native Constructor getDeclaredConstructor (Class[] parameterTypes)
throws NoSuchMethodException, SecurityException;
public native Class[] getDeclaredClasses () throws SecurityException;
public Constructor[] getDeclaredConstructors () throws SecurityException
{
return _getConstructors (true);
}
public native Field getDeclaredField (String fieldName)
throws NoSuchFieldException, SecurityException;
public native Field[] getDeclaredFields () throws SecurityException;
public native Method getDeclaredMethod (String methodName,
Class[] parameterTypes)
throws NoSuchMethodException, SecurityException;
public native Method[] getDeclaredMethods () throws SecurityException;
public native Class getDeclaringClass ();
private native Field getField (String fieldName, int hash)
throws NoSuchFieldException, SecurityException;
public Field getField (String fieldName)
throws NoSuchFieldException, SecurityException
{
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkMemberAccess (this, java.lang.reflect.Member.DECLARED);
Field fld = getField(fieldName, fieldName.hashCode());
if (fld == null)
throw new NoSuchFieldException(fieldName);
return fld;
}
private native Field[] _getFields (Field[] result, int offset);
public native Field[] getFields () throws SecurityException;
public Package getPackage()
{
ClassLoader cl = getClassLoader();
if (cl != null)
{
String name = getName();
String pkg = "";
int idx = name.lastIndexOf('.');
if (idx >= 0)
pkg = name.substring(0, idx);
return cl.getPackage(pkg);
}
else
return null;
}
public native Class[] getInterfaces ();
private final native void getSignature (StringBuffer buffer);
private static final native String getSignature (Class[] parameterTypes,
boolean is_construtor);
public native Method getMethod (String methodName, Class[] parameterTypes)
throws NoSuchMethodException, SecurityException;
private native int _getMethods (Method[] result, int offset);
public native Method[] getMethods () throws SecurityException;
public native int getModifiers ();
public native String getName ();
public java.net.URL getResource (String resourceName)
{
String name = resourcePath (resourceName);
ClassLoader loader = getClassLoader ();
if (loader == null)
return ClassLoader.getSystemResource (name);
else
return loader.getResource (name);
}
public java.io.InputStream getResourceAsStream (String resourceName)
{
String name = resourcePath (resourceName);
ClassLoader loader = getClassLoader ();
if (loader == null)
return ClassLoader.getSystemResourceAsStream (name);
else
return loader.getResourceAsStream (name);
}
private String resourcePath (String resourceName)
{
if (resourceName.startsWith ("/"))
return resourceName.substring (1);
Class c = this;
while (c.isArray ())
c = c.getComponentType ();
String packageName = c.getName ().replace ('.', '/');
int end = packageName.lastIndexOf ('/');
if (end == -1)
return resourceName;
else
return packageName.substring (0, end+1) + resourceName;
}
public Object[] getSigners ()
{
return null;
}
public native Class getSuperclass ();
public native boolean isArray ();
public native boolean isAssignableFrom (Class cls);
public native boolean isInstance (Object obj);
public native boolean isInterface ();
public native boolean isPrimitive ();
public native Object newInstance ()
throws InstantiationException, IllegalAccessException;
private native ProtectionDomain getProtectionDomain0();
public ProtectionDomain getProtectionDomain()
{
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkPermission(ClassLoader.protectionDomainPermission);
ProtectionDomain protectionDomain = getProtectionDomain0();
if (protectionDomain == null)
return ClassLoader.unknownProtectionDomain;
else
return protectionDomain;
}
public String toString ()
{
if (isPrimitive ())
return getName ();
return (isInterface () ? "interface " : "class ") + getName ();
}
private Class ()
{
}
private void checkMemberAccess (int flags)
{
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkMemberAccess(this, flags);
}
private native void initializeClass ();
protected native void finalize ();
}