反射中常用的一些方法

xiaoxiao2021-02-28  118

一:类(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();

新手上路,请多多指教!

分享使人进步!

转载请注明原文地址: https://www.6miu.com/read-38571.html

最新回复(0)