android反射机制(二)

/**
 * 
 * 通过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();
        }

    }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值