Java反射Reflection--常用API函数的使用

下面提供了java反射中常用的一些API函数的使用。

首先看看Class,反射的核心类,所有的操作都是围绕该类来生成的,Class类十分的特殊,和其他的类一样继承与Object类,其实例用来表达java在运行时的classes和interface,也用来表达enum、array、primitiveJavatypes(boolean,byte,char,short,int,long,float,double)以及关键字void。当一個class被加载,或当类加载器(classloader)的defineClass()被JVM调用,JVM便自动的产生一個Classobject实例。

获得Class的途径可以有以下几种:

------1.运用getClass()

注:每个class都有此函数

Stringstr="abc";

Classc1=str.getClass();

------2.运用etSuperclass()

Class.getSuperclass();

Buttonb=newButton();

Classc1=b.getClass();

Classc2=c1.getSuperclass();

-----3.运用static方法Class.forName()

Classc1=Class.forName("java.lang.String");

Classc2=Class.forName("java.awt.Button");

Classc3=Class.forName("java.util.LinkedList$Entry");

Classc4=Class.forName("I");

Classc5=Class.forName("[I");

------4.运用.class語法

Classc1=String.class;

Classc2=java.awt.Button.class;

Classc3=Main.InnerClass.class;

Classc4=int.class;

Classc5=int[].class;

-----运用primitivewrapperclasses的TYPE语法

Classc1=Boolean.TYPE;

Classc2=Byte.TYPE;

Classc3=Character.TYPE;

Classc4=Short.TYPE;

Classc5=Integer.TYPE;

Classc6=Long.TYPE;

Classc7=Float.TYPE;

Classc8=Double.TYPE;

Classc9=Void.TYPE;

JavaReflection中常用的函数使用方法如下:

package cn.com.reflection;  
      
    import java.lang.reflect.Modifier;  
      
    public class ReflectTester2 {  
      
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
              
            String str="hejianjie";  
            Class cls=str.getClass();  
              
            //获取该对象所属于的包  
            Package pack=cls.getPackage();  
            String packName=pack.getName();  
            System.out.println("包名:"+packName);  
              
            //获取对象所属类的修饰符  
            int flag=cls.getModifiers();  
            String modiferName=Modifier.toString(flag);  
            System.out.println("类修饰符:"+modiferName);  
            //判断是否接口  
            boolean bool=Modifier.isInterface(flag);  
            System.out.println("该Class是接口乎:"+bool);  
              
            //返回类的名字  
            String classname=cls.getName();  
            System.out.println("该Class所代表对象的完整的包名是:"+classname);  
              
            //返回父类的Class的名字  
            Class supClass=cls.getSuperclass();  
            String supClassName=supClass.getName();  
            System.out.println("父类的Class的名称:"+supClassName);  
      
            //返回该Class所代表的对象实现的接口的Class的数组  
            Class[] iterClass=cls.getInterfaces();  
            for(int i=0;i<iterclass.length;i++){  < span="">
                Class classType=iterClass[i];  
                System.out.println(classname+"类所实现的接口:"+classType);  
            }  
              
              
        }  
      
    }  

程序运行结果如下:

包名:java.lang  
    类修饰符:public final  
    该Class是接口乎:false  
    该Class所代表对象的完整的包名是:java.lang.String  
    父类的Class的名称:java.lang.Object  
    java.lang.String类所实现的接口:interface java.io.Serializable  
    java.lang.String类所实现的接口:interface java.lang.Comparable  
    java.lang.String类所实现的接口:interface java.lang.CharSequence  

相关推荐