class.java

来自「gcc3.2.1源代码」· Java 代码 · 共 239 行

JAVA
239
字号
// Class.java - Representation of a Java class./* Copyright (C) 1998, 1999, 2000  Free Software Foundation   This file is part of libgcj.This software is copyrighted work licensed under the terms of theLibgcj License.  Please consult the file "LIBGCJ_LICENSE" fordetails.  */package java.lang;import java.io.Serializable;import java.io.InputStream;import java.lang.reflect.*;import java.security.*;/** * @author Tom Tromey <tromey@cygnus.com> * @date October 1, 1998  *//* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. * plus gcj compiler sources (to determine object layout) * Status:  Sufficient for our purposes, but some methods missing * and some not implemented. */public final class Class implements Serializable{  public static native Class forName (String className)    throws ClassNotFoundException;  /** @since 1.2 */  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;  // This is used to implement getConstructors and  // getDeclaredConstructors.  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;  // This is marked as unimplemented in the JCL book.  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;  /**   * Returns the <code>Package</code> in which this class is defined   * Returns null when this information is not available from the   * classloader of this class or when the classloader of this class   * is null.   *   * @since 1.2   */  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;  }  // FIXME: implement.  Requires java.security.  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;  // We need a native method to retrieve the protection domain, because we  // can't add fields to java.lang.Class that are accessible from Java.  private native ProtectionDomain getProtectionDomain0();  /**   * Returns the protection domain of this class. If the classloader   * did not record the protection domain when creating this class   * the unknown protection domain is returned which has a <code>null</code>   * code source and all permissions.   *   * @exception SecurityException if a security manager exists and the caller   * does not have <code>RuntimePermission("getProtectionDomain")</code>.   *   * @since 1.2   */  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 ();  }  // Don't allow new classes to be made.  private Class ()  {  }  // Do a security check.  private void checkMemberAccess (int flags)  {    SecurityManager sm = System.getSecurityManager();    if (sm != null)      sm.checkMemberAccess(this, flags);  }  // Initialize the class.  private native void initializeClass ();  // finalization  protected native void finalize ();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?