反射的简单应用

反射会降低程序的运行效率,但是会极大的提高开发效率!!!

项目开发中会大量用到反射。

public class Demo {

@SuppressWarnings("all")
public static void main(String[] args) {
//反射在程序运行的时候才起作用,编译的时候不起作用
try {
Class<User> clazz = (Class<User>) Class.forName("cn.com.gjw.bean.User");
//通过反射API调用构造方法
User user = clazz.newInstance();//其实是调用了User的无参构造方法
System.out.println(user);
Constructor<User> c = clazz.getDeclaredConstructor(int.class,int.class,String.class);
User user2 = c.newInstance(1001, 18, "zhangsan");
System.out.println(user2.getUname());

//通过反射API调用普通方法
User user3 = clazz.newInstance();
Method method = clazz.getDeclaredMethod("setUname", String.class);
method.invoke(user3, "lisi");//激活user3对象的setUname方法
System.out.println(user3.getUname());

//通过反射API操作属性
Field field = clazz.getDeclaredField("uname");
//访问私有属性或方法时会报异常
field.setAccessible(true);//这个属性不需要做安全检查了,可以直接访问     (调用反射会降低程序运行性能,在必须使用反射的场合,禁用安全检查可以提高反射的运行速度)
field.set(user3, "wangwu"); //通过反射直接写属性
System.out.println(user3.getUname());
System.out.println(field.get(user3)); //通过反射读属性的值
} catch (Exception e) {
e.printStackTrace();
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值