初识 java 反射机制 (二)

【案例】调用其他类的set和get方法

class hello {
public static void main(String[] args) {
    Class<?> demo = null;
    Object obj=null;
    try {
        demo = Class.forName("Reflect.Person");
    } catch (Exception e) {
        e.printStackTrace();
    }
    try{
     obj=demo.newInstance();
    }catch (Exception e) {
        e.printStackTrace();
    }
    setter(obj,"Sex","男",String.class);
    getter(obj,"Sex");
}

/**
 * @param obj
 *            操作的对象
 * @param att
 *            操作的属性
 * */
public static void getter(Object obj, String att) {
    try {
        Method method = obj.getClass().getMethod("get" + att);
        System.out.println(method.invoke(obj));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * @param obj
 *            操作的对象
 * @param att
 *            操作的属性
 * @param value
 *            设置的值
 * @param type
 *            参数的属性
 * */
public static void setter(Object obj, String att, Object value,
        Class<?> type) {
    try {
        Method method = obj.getClass().getMethod("set" + att, type);
        method.invoke(obj, value);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}// end class

【运行结果】:

【案例】通过反射操作属性

class hello {
public static void main(String[] args) throws Exception {
    Class<?> demo = null;
    Object obj = null;

    demo = Class.forName("Reflect.Person");
    obj = demo.newInstance();

    Field field = demo.getDeclaredField("sex");
    field.setAccessible(true);
    field.set(obj, "男");
    System.out.println(field.get(obj));
}
}// end class

【案例】通过反射取得并修改数组的信息:

import java.lang.reflect.*;
class hello{
public static void main(String[] args) {
    int[] temp={1,2,3,4,5};
    Class<?>demo=temp.getClass().getComponentType();
    System.out.println("数组类型: "+demo.getName());
    System.out.println("数组长度  "+Array.getLength(temp));
    System.out.println("数组的第一个元素: "+Array.get(temp, 0));
    Array.set(temp, 0, 100);
    System.out.println("修改之后数组第一个元素为: "+Array.get(temp, 0));
}
}

【运行结果】:

数组类型: int

数组长度 5

数组的第一个元素: 1

修改之后数组第一个元素为: 100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值