一、获得Class对象
你可以通过以下的方法获得Class对象:
1. 如果你有可用的类的实例,你可以通过调用Object.getClass()方法来得到Class对象。当你需要得到一个对象的信息,但是有不知道其属于哪个类时,可以使用getClass方法来得到其Class对象。
Class c = mystery.getClass()
2. 如果你想得到一个对象的超类对象的Class对象,可以调用它本身的Class对象的getSuperclass()方法。
TextField t = new TextField();
Class c = t.getClass();
Class s = c.getSuperclass();
在上面的例子中,你将得到TextField的超类TextComponent对象相关联的Class对象。
3. 如果你在编码的时候知道类的名字,你可以通过在它的名字后面增加.class的方法得到它的Class对象。
Class c = java.awt.Button.class;
4. 如果你在编码的时候不知道类的名字,但在运行的时候知道,可以使用forName方法来得到该类的Class对象。
Class c = Class.forName( strg );
在上面的例子中,假设strg对象保存的是“java.awt.Button”,这样forName返回的是与java.awt.Button相关联的Class对象。
二、获得类的名字
在运行时,你可以通过调用Class对象的getName方法来得到Class相关联的对象的类的名字。这个方法返回的是全路径名称(包括其全部的包的名称)。
下面的例子得到一个对象的类名。首先需要得到这个对象对应的Class对象。然后通过调用getName方法来得到这个对象的类名。
import java.lang.reflect.*;
import java.awt.*;
public class test01
{
public static void main(String[] args)
{
Button b = new Button();
printName( b );
}
public static void printName( Object o )
{
Class c = o.getClass();
String s = c.getName();
System.out.println( s );
}
}
|
该程序的运行结果为:
java.awt.Button
|
三、得到类的修饰语
在运行时得到一个类的修饰语需要如下的步骤:
1. 通过Class对象调用getModifiers得到一个修饰语的集合。
2. 通过调用isPublic,isAbstract,isFinal来判断该修饰语的类型。
import java.lang.reflect.*;
import java.awt.*;
public class test02
{
public static void main(String[] args)
{
String s = new String();
printModifiers( s );
}
static void printModifiers( Object o )
{
Class c = o.getClass();
int m = c.getModifiers();
if( Modifier.isPublic( m ) )
System.out.println( "public" );
if( Modifier.isAbstract( m ) )
System.out.println( "abstract" );
if( Modifier.isFinal( m ) )
System.out.println( "final" );
}
}
|
该程序的运行结果为:
public
final
|
四、得到一个类的超类
判断一个类是否存在超类,可以调用getSuperclass方法,它将返回一个代表其父类的Class对象,如果返回值为null,那么表示该类没有超类。
import java.lang.reflect.*;
import java.awt.*;
public class test03
{
public static void main(String[] args)
{
Button b = new Button();
printSuperclass( b );
}
static void printSuperclass( Object b )
{
Class subclass = b.getClass();
Class superclass = subclass.getSuperclass();
while( superclass!=null )
{
String className = superclass.getName();
System.out.println( className );
subclass = superclass;
superclass = subclass.getSuperclass();
}
}
}
|
其运行结果为:
java.awt.Component
java.lang.Object
|