反射中常用的一些方法

来源:互联网 发布:淘宝怎么不能找人代付 编辑:程序博客网 时间:2024/05/18 12:30
一:类(Class)
Class c=Person.class;
c.getName(); //获得c对象的全名
c.getSimpleName(); //获得c对象的类名(简称)
c.newInstance(); //返回一个对象(Object),或是说通过c对象进行实例化




二:单个属性的相关操作

Field类中包括修饰符,类型,属性名等


//获得类的某一个属性(公开的)
Field f=c.getField("pname"); //Field(属性)
Class对象.getField(属性名)  




//获得类的某一个属性(私有化的)
Field f=c.getDeclaredField("pname");
Class对象.getDeclaredField(属性名);




//私有化的属性在赋值之前,打开其访问权限,俗称“放权”
f.setAccessible(true);
属性对象.setAccessible(true)



//给单个对象的某个属性赋值
set()      属性.set(对象,值)




//获得此属性在某个对象中的值
Object oo=f.get(obj); //注:Object类型不是指对象,而是指属性的值
get()   属性.get(对象)



//获得属性的名称
String name = f.getName();
属性.getName()




//获得属性的修饰符
int Modifiers = f.getModifiers();
属性.getModifiers()

Modifier.isPublic(int);//是否为公开的
Modifier.isPrivate(int);//是否为私有的
Modifier.isStatic(int); //是否为静态的




修饰符所有值

默认友好的:0
PUBLIC: 1
PRIVATE: 2
PROTECTED: 4


STATIC: 8
FINAL: 16


SYNCHRONIZED: 32
VOLATILE: 64
TRANSIENT: 128
NATIVE: 256
INTERFACE: 512
ABSTRACT: 1024
STRICT: 2048










//获得属性的数据类型
String type = f.getType();
属性.getType()







三:多个属性的相关操作


//获得单个类的所有属性(只有公开的)
Field[] fs = c.getFields();
Class对象.getFields()



//获得单个类的所有属性(包含私有的)
Field[] fs = c.getDeclaredFields();




四:方法的相关操作

//获得类中所有的方法(含继承而来的方法)
Method[] ms=c.getMethods();
Class对象.getMethods()




//获得类中所有方法(包含私有但不包含继承而来的方法)
Method[] ms=c.getDeclaredMethods();
Class对象.getDeclaredMethods()



获取方法对象的一部分:
m.getName(); //方法名
m.getModifiers(); //修饰符
m.getReturnType(); //返回类型
m.getParameterType(); //方法的参数,返回一个Class[]



得到单个方法,并调用:


Method m=c.getDeclaredMethod("方法名", 参数); 
//没有参数就是null ;单个参数为参数类型.class ;
//多个参数为 new class[]{参数类型.class , 参数类型.class……}


Object obj=c.newInstance(); //创建对象


//如果方法是私有化的(private)修饰,则需要加上一步“放权”
//m.setAccessible(true);


m.invoke(obj, null); //obj是对象名,
//后面为参数,单个参数为参数值;
//多个参数为 new Object[]{参数的值 , 参数的值……}

//如果有返回值
Object o = m.invoke(对象 , 参数)



五:构造方法的相关操作

//得到所有的构造方法
Constructor[] cc=c.getDeclaredConstructors();
Class对象.getDeclaredConstructors()


//获得构造方法的参数类型(包括方法)
Class[] cs=c.getParameterTypes();
Class对象.getParameterTypes()




//取不带参数的构造方法(取单个构造方法)
Constructor cb=c.getDeclaredConstructor(null);
//实例化时调用构造方法
Object ttb=cb.newInstance(null); //null代表无参,返回实例化的对象




六:Class对象的其他操作



//获得类所在的包名
c.getPackage().getName();




//取当前类的父类
c.getSuperclass();




//取当前类实现的接口,返回Class[]数组
Class[] cs=c.getInterfaces();









新手上路,请多多指教!


分享使人进步!

















原创粉丝点击