Java中的反射机制

Java中的反射,百度百科这样解释道:在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

例如:

package com.bean;

public class Goods {// 商品类
	
	private int id = 1001;
	private String name = "泡面";
	private double price = 4.5;
	
	public Goods(int id, String name) {
		System.out.println("Goods(int id, String name)");
		this.id = id;
		this.name = name;
	}
	public Goods(String name) {
		System.out.println("Goods(String name)");
		this.name = name;
	}
	
	public Goods() {
		System.out.println("无参构造器...");
	}

	public int getId() {
		System.out.println("Goods.getId()");
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	@Override
	public String toString() {
		return "[编号:" + id + ", 名称:" + name + ", 价格:" + price + "]";
	}
}

获取Class对象的三种方式:

	Class<?> c1 = (new Goods()).getClass(); // 对象名.getClass()
	Class<?> c2 = Goods.class; // 类名.class
	Class<?> c3 = Class.forName("com.bean.Goods"); // Class.forName("类的全路径名");

1.创建对象

	Class clazz = Class.forName("com.bean.Goods");// 得到类字节码
	// 创建对象1: 默认构造函数简写
	Goods g1 = (Goods) clazz.newInstance();
	// 创建对象2: 通过带参数构造器创建对象
	Constructor<?> cons = clazz.getConstructor(int.class, String.class);
	Goods g2 = (Goods) cons.newInstance(100, "可口可乐");
	System.out.println(g1);
	System.out.println(g2);

2.获取属性和值

	Class clazz = Class.forName("com.bean.Goods");
	Goods g = (Goods) clazz.newInstance();
	System.out.println(g);
	Field[] fil = clazz.getDeclaredFields();// 获取所有的属性名称
	for (Field f : fil) {
		f.setAccessible(true);// 设置强制访问
		String name = f.getName();// 名称
		Object value = f.get(g);// 值
		System.out.println(name + "\t" + value);
	}

3.获取方法

	Class clazz = Class.forName("com.bean.Goods");
	Goods g = (Goods) clazz.newInstance();
	System.out.println(g);
	Method met = clazz.getDeclaredMethod("getId");
	Object ob = met.invoke(g);//方法的返回值
	System.out.println(ob);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值