⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class.java

📁 用于移动设备上的java虚拟机源代码
💻 JAVA
字号:
/* * @(#)Class.java	1.30 02/08/15 @(#) * * Copyright (c) 1994-2002 Sun Microsystems, Inc.  All rights reserved. * PROPRIETARY/CONFIDENTIAL * Use is subject to license terms. */package java.lang;import  com.sun.midp.io.ResourceInputStream;/** * Instances of the class <code>Class</code> represent classes and interfaces * in a running Java application.  Every array also belongs to a class that is * reflected as a <code>Class</code> object that is shared by all arrays with * the same element type and number of dimensions. * * <p> <code>Class</code> has no public constructor. Instead <code>Class</code> * objects are constructed automatically by the Java Virtual Machine as classes * are loaded. * * <p> The following example uses a <code>Class</code> object to print the * class name of an object: * * <p> <blockquote><pre> *     void printClassName(Object obj) { *         System.out.println("The class of " + obj + *                            " is " + obj.getClass().getName()); *     } * </pre></blockquote> * * @author  unascribed * @version 1.106, 12/04/99 (CLDC 1.0, Spring 2000) * @since   JDK1.0 */public finalclass Class {    /*     * Constructor. Only the Java Virtual Machine creates Class     * objects.     */    private Class() {}    /**     * Converts the object to a string. The string representation is the     * string "class" or "interface", followed by a space, and then by the     * fully qualified name of the class in the format returned by     * <code>getName</code>.  If this <code>Class</code> object represents a     * primitive type, this method returns the name of the primitive type.  If     * this <code>Class</code> object represents void this method returns     * "void".     *     * @return a string representation of this class object.     */    public String toString() {        return (isInterface() ? "interface " :  "class ") + getName();    }    /**     * Returns the <code>Class</code> object associated with the class     * with the given string name.     * Given the fully-qualified name for a class or interface, this     * method attempts to locate, load and link the class.  If it     * succeeds, returns the Class object representing the class.  If     * it fails, the method throws a ClassNotFoundException.     * <p>     * For example, the following code fragment returns the runtime     * <code>Class</code> descriptor for the class named     * <code>java.lang.Thread</code>:     * <ul><code>     *   Class&nbsp;t&nbsp;= Class.forName("java.lang.Thread")     * </code></ul>     *     * @param      className   the fully qualified name of the desired class.     * @return     the <code>Class</code> descriptor for the class with the     *             specified name.     * @exception  ClassNotFoundException  if the class could not be found.     * @since      JDK1.0     */    public static native Class forName(String className)        throws ClassNotFoundException;    /**     * Creates a new instance of a class.     *     * @return     a newly allocated instance of the class represented by this     *             object. This is done exactly as if by a <code>new</code>     *             expression with an empty argument list.     * @exception  IllegalAccessException  if the class or initializer is     *               not accessible.     * @exception  InstantiationException  if an application tries to     *               instantiate an abstract class or an interface, or if the     *               instantiation fails for some other reason.     * @since     JDK1.0     */    public native Object newInstance()        throws InstantiationException, IllegalAccessException;    /**     * Determines if the specified <code>Object</code> is assignment-compatible     * with the object represented by this <code>Class</code>.  This method is     * the dynamic equivalent of the Java language <code>instanceof</code>     * operator. The method returns <code>true</code> if the specified     * <code>Object</code> argument is non-null and can be cast to the     * reference type represented by this <code>Class</code> object without     * raising a <code>ClassCastException.</code> It returns <code>false</code>     * otherwise.     *     * <p> Specifically, if this <code>Class</code> object represents a     * declared class, this method returns <code>true</code> if the specified     * <code>Object</code> argument is an instance of the represented class (or     * of any of its subclasses); it returns <code>false</code> otherwise. If     * this <code>Class</code> object represents an array class, this method     * returns <code>true</code> if the specified <code>Object</code> argument     * can be converted to an object of the array class by an identity     * conversion or by a widening reference conversion; it returns     * <code>false</code> otherwise. If this <code>Class</code> object     * represents an interface, this method returns <code>true</code> if the     * class or any superclass of the specified <code>Object</code> argument     * implements this interface; it returns <code>false</code> otherwise. If     * this <code>Class</code> object represents a primitive type, this method     * returns <code>false</code>.     *     * @param   obj the object to check     * @return  true if <code>obj</code> is an instance of this class     *     * @since JDK1.1     */    public native boolean isInstance(Object obj);    /**     * Determines if the class or interface represented by this     * <code>Class</code> object is either the same as, or is a superclass or     * superinterface of, the class or interface represented by the specified     * <code>Class</code> parameter. It returns <code>true</code> if so;     * otherwise it returns <code>false</code>. If this <code>Class</code>     * object represents a primitive type, this method returns     * <code>true</code> if the specified <code>Class</code> parameter is     * exactly this <code>Class</code> object; otherwise it returns     * <code>false</code>.     *     * <p> Specifically, this method tests whether the type represented by the     * specified <code>Class</code> parameter can be converted to the type     * represented by this <code>Class</code> object via an identity conversion     * or via a widening reference conversion. See <em>The Java Language     * Specification</em>, sections 5.1.1 and 5.1.4 , for details.     *     * @param cls the <code>Class</code> object to be checked     * @return the <code>boolean</code> value indicating whether objects of the     * type <code>cls</code> can be assigned to objects of this class     * @exception NullPointerException if the specified Class parameter is     *            null.     * @since JDK1.1     */    public native boolean isAssignableFrom(Class cls);    /**     * Determines if the specified <code>Class</code> object represents an     * interface type.     *     * @return  <code>true</code> if this object represents an interface;     *          <code>false</code> otherwise.     */    public native boolean isInterface();    /**     * Determines if this <code>Class</code> object represents an array class.     *     * @return  <code>true</code> if this object represents an array class;     *          <code>false</code> otherwise.     * @since   JDK1.1     */    public native boolean isArray();    /**     * Returns the fully-qualified name of the entity (class, interface, array     * class, primitive type, or void) represented by this <code>Class</code>     * object, as a <code>String</code>.     *     * <p> If this <code>Class</code> object represents a class of arrays, then     * the internal form of the name consists of the name of the element type     * in Java signature format, preceded by one or more "<tt>[</tt>"     * characters representing the depth of array nesting. Thus:     *     * <blockquote><pre>     * (new Object[3]).getClass().getName()     * </pre></blockquote>     *     * returns "<code>[Ljava.lang.Object;</code>" and:     *     * <blockquote><pre>     * (new int[3][4][5][6][7][8][9]).getClass().getName()     * </pre></blockquote>     *     * returns "<code>[[[[[[[I</code>". The encoding of element type names     * is as follows:     *     * <blockquote><pre>     * B            byte     * C            char     * D            double     * F            float     * I            int     * J            long     * L<i>classname;</i>  class or interface     * S            short     * Z            boolean     * </pre></blockquote>     *     * The class or interface name <tt><i>classname</i></tt> is given in fully     * qualified form as shown in the example above.     *     * @return  the fully qualified name of the class or interface     *          represented by this object.     */    public native String getName();    /**     * Finds a resource with a given name.  This method returns null if no     * resource with this name is found.  The rules for searching     * resources associated with a given class are profile     * specific.     *     * @param name  name of the desired resource     * @return      a <code>java.io.InputStream</code> object.     * @since JDK1.1     */    public java.io.InputStream getResourceAsStream(String name) {        try {	    if (name.length() > 0 && name.charAt(0) == '/') {		name = name.substring(1);	    } else {		String className = this.getName();		int dotIndex = className.lastIndexOf('.');		if (dotIndex >= 0) {		    name = className.substring(0, dotIndex + 1).replace('.', '/')                            + name;		}	    }            return new ResourceInputStream(name);        } catch (java.io.IOException x) {            return null;        }    }    /*     * These private function is used by KVM for initialization.     * Users never see them.     */    private static void runCustomCode() {}/** VM-specific stuff starts here: */        /**       * Returns the <code>Class</code> representing the superclass of the entity       * (class, interface, primitive type or void) represented by this       * <code>Class</code>.  If this <code>Class</code> represents either the       * <code>Object</code> class, an interface, a primitive type, or void, then       * null is returned.  If this object represents an array class then the       * <code>Class</code> object representing the <code>Object</code> class is       * returned.	   *	   * Note that this method is not supported by CLDC.	   * We have made the method private, since it is	   * needed by our implementation.       *       * @return the superclass of the class represented by this object.       */       /* We've made getSuperclass private, since CLDC does not support this method */       private native Class getSuperclass();    /*     * This private variable is used by the VM. Users never see it.     */    private transient Object vmClass;    private int    status;    private Thread thread;    private static final int VERIFIED    = 1;    private static final int IN_PROGRESS = 2;    private static final int INITIALIZED = 3;    private static final int ERROR       = 4;    // Native for invoking <clinit>    private native void invoke_clinit();    private native void invoke_verifier();    void initialize() throws Throwable {      verify();      // Implements the 11 step program detailed in Java Language Specification 12.4.2      // Step 1      synchronized (this) {        //  Step 2        while (status == IN_PROGRESS && thread != Thread.currentThread()) {          try{ wait(); } catch (InterruptedException e) { }        }        // Step 3        if (status == IN_PROGRESS && thread == Thread.currentThread()) return;        // Step 4        if (status == INITIALIZED) return;        // Step 5        if (status == ERROR) throw new Error("NoClassDefFoundError:"+getName());        /* Note: CLDC 1.0 does not have NoClassDefFoundError class */        // Step 6        status = IN_PROGRESS;        thread = Thread.currentThread();      }      try {        // Step 7        Class s = getSuperclass();        if (s != null && s.status != INITIALIZED) {           // The test of s.status is not part of the spec, but it saves us          // doing a lot of work in the most common case.          s.initialize();        }        // Step 8        invoke_clinit();        // Step 9        synchronized (this) {          status = INITIALIZED;          thread = null;          notifyAll();        }      } catch(Throwable e) {        // Step 10 and 11        synchronized (this) {          status = ERROR;          thread = null;          notifyAll();          throwError(e);        }      }    }    synchronized void verify() throws Throwable {      if (status < VERIFIED) {         getSuperclass().verify();        invoke_verifier();        status = VERIFIED;      }    }    private Error throwError(Throwable e) throws Error {         throw (e instanceof Error) ? (Error)e             : new Error("Static initializer: " + e.getClass().getName() + ", " + e.getMessage());    }}

⌨️ 快捷键说明

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