Class c?/h2>
要发C个具体的cȝ信息,首先要取得它的Class 对象 如果你有一?obj 对象,你可以通过下面的方式来取得它的class对象 Class c = obj.getClass(); 你可以通过一个class的实例c 取得它的父类 Class sup = c.getSuperclass(); 如果你已l知道一个类在编译时候的名字 (比喻? Button) ,你可以通过下面q样的简单方法取得class对象 Class c = Button.class; 如果你知道一个类在运行期的名?比喻_一个Stringcd变量str),你可以通过下面的方法取得类对象 Class c = Class.forName(str);
取得cȝ名字
如果你已l有了一个class对象cQ你可以通过下面的方法取得类的名?c.getName() getName 取得cȝ全\径名? 比喻? Class c = Button.class; String s = c.getName(); System.out.println(s); 会输?br> java.awt.Button c?Class 和它的方法都是在 java.lang?所以不需要用import使其可用?br>
Class对象有一个实例方?getModifiers() Q它q回一个int型的?br> Z“解释” int 型的l果Q我们要用到Modifiercȝ一些方法,它们位于 java.lang.reflect, 所?
import java.lang.reflect.*;
现在我们可以做下面的事情了:
if (Modifier.isPublic(m)) { System.out.println("public"); }
取得cȝ修饰WII
Modifier 包含下面的一些方?(只列出部?: public static boolean isAbstract(int) public static boolean isFinal(int) public static boolean isInterface(int) public static boolean isPrivate(int) public static boolean isProtected(int) public static boolean isPublic(int) public static String toString(int) q会q回一个如下所C的字符?br>"public final synchronized strictfp"
取得接口
一个类可以实现Q个或多个接?br> getInterfaces() q回一?Class 对象的数l?br> q些是类实现的一些接?br> 下面的代码来自Sun的入门指? static void printInterfaceNames(Object o) { Class c = o.getClass(); Class[ ] theInterfaces = c.getInterfaces(); for (int i = 0; i < theInterfaces.length; i++) { String interfaceName = theInterfaces[i].getName(); System.out.println(interfaceName); } } 注意Q零长度数组在Java中是合法?br>
判断cd接口
Class cL能代表类也能代表接口 要确定一个给定的 Class 对象 c 是否是一个是接口Q可以?c.isInterface() 要研Iclass对象的更多内容的话,你可以用下面这些方? getModifiers() getFields() // "fields" == "instance variables" getConstructors() getMethods() isArray()
取得字段
public Field[] getFields() throws SecurityException q回一个public的字D|l?(变量) 数组的长度允许是Q?br> 字段的组l顺序没有Q何的规则 本n定义的和通过l承的来的变量都被返?但是不包?static 变量 public Field getField(String name) throws NoSuchFieldException, SecurityException q回指定名称?public 字段 如果没有直接的字D被发现Q那父类或者接口被递归的查?br>
使用字段 I
如果 f ?Field 对象, 那么 f.getName() q回字段的简单的名字 f.getType() q回字段的类?(Class) f.getModifiers() q回字段的Modifier f.toString() q回一个包含了讉K修饰W,cdQ和全\径字D名字的字符?br> 例如: public java.lang.String Person.name f.getDeclaringClass() q回定义字段的类?Class 对象