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