android反射机制(二)

    xiaoxiao2021-03-25  136

    /** * * 通过Class对象创建其表示的对象 * */ public class InstanceDemo { public static void main(String[] args) { //1.获取YunSong这个类的类信息对象------Class //注意:newInstance()方法通过调用无参构造方法来给我们实例化对象(尽量保留无参构造方法) Class ysClass = YunSong.class; try { YunSong ys = (YunSong) ysClass.newInstance();//创建此 Class 对象所表示的类的一个新实例。 //new YunSong() ys.setName("云松"); ys.setAge(35); System.out.println(ys); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } public class InstanceDemo2 { public static void main(String[] args) { Class ysClass = YunSong.class; //通过调用getConstructors()获取此类的所有的构造方法(公共的) Constructor<YunSong>[] cs = ysClass.getConstructors(); for (int i = 0; i < cs.length; i++) { Constructor c = cs[i]; String name = c.getName(); System.out.println(Modifier.toString(c.getModifiers())+","+name); Class[] csParameters = c.getParameterTypes(); for (int j = 0; j < csParameters.length; j++) { System.out.println(csParameters[j].getName()); } System.out.println("--------"); } System.out.println("-----获取此类的所有的公共的方法------"); //通过 getMethods获取此类的所有的公共的方法 Method[]methods = ysClass.getMethods(); for (Method method : methods) { System.out.println("方法的名称:"+method.getName()); System.out.println("返回值类型:"+method.getReturnType().toString()); Class[] ps = method.getParameterTypes(); for (Class class1 : ps) { System.out.println("参数名称:"+class1.getName()+",参数修饰符"+Modifier.toString(class1.getModifiers())); } System.out.println("----"); } System.out.println("-----获取此类的所有的公共的属性------"); //通过获取此类的所有的公共的属性 Field[] fields = ysClass.getFields(); for (Field field : fields) { System.out.println("属性名称:"+field.getName()+",属性修饰符:" +Modifier.toString(field.getModifiers())+",属性类型:"+field.getType().toString()); } //已知方法的参数,可以使用getMethod(); /** * 参数一:方法名 * 参数二:方法的参数的类型 setNameAndAge("",19); */ try { Method setNameMethod = ysClass.getMethod("setName", String.class);//形参类型 YunSong yss = (YunSong)ysClass.newInstance(); setNameMethod.invoke(yss, "云松");//实参 执行方法 System.out.println("设置完:"+yss); } catch (NoSuchMethodException | SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } }
    转载请注明原文地址: https://ju.6miu.com/read-5045.html

    最新回复(0)