反射API

由于春节放假,上班后又马上出差,所以有写日子没有写什么东西了。这次主要是重新仔细的学习一下JAVA的反射API,用得是sun的文档,写得比较啰嗦,我只是稍微的精简了一下。其实用处不是很大,就是复习一下。嘻嘻!

一、获得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. 通过调用isPublicisAbstractisFinal来判断该修饰语的类型。

 

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

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值