Java运行通过程序化的方式间接对Class进行操作,Class文件由类装载期装载后,在JVM中形成一份描述Class结构的元信息,通过对该元信息对象,可以获得Class的结构信息,如构造函数,属性,方法等,java允许用户用这个Class相关的元信息对象间接调用class对象的功能。
如下一个类Car,和利用反射机制调用他的类ReflectTest
package reflect;
//实体类
public class Car {
private String brand;
private String color;
private int maxSpeed;
/**
* 构造方法
*/
public Car() {
// TODO Auto-generated constructor stub
}
/**
* 无参构造方法
*/
public Car(String brand,String color,int maxSpeed){
this.brand=brand;
this.color=color;
this.maxSpeed=maxSpeed;
}
/**
* 无参方法
* @return
*/
public void introduce(){
System.out.println("brand="+brand+";color="+color+";maxSpeed="+maxSpeed);
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getMaxSpeed() {
return maxSpeed;
}
public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
}
package reflect;
//反射调用类
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.omg.CORBA.Current;
public class ReflectTest {
public static Car initByDefaultConst() throws Throwable {
//通过类加载器加载类对象
ClassLoader loader =Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("reflect.Car");
//获取类的默认构造器,构造类
Constructor cons = clazz.getConstructor();
Car car = (Car) cons.newInstance();
//通过反射方法设置属性
Method setBrand = clazz.getMethod("setBrand", String.class);
setBrand.invoke(car, "玛莎拉蒂");
Method setColor= clazz.getMethod("setColor", String.class);
setColor.invoke(car, "红色");
Method setMaxSpeed =clazz.getMethod("setMaxSpeed", int.class);
setMaxSpeed.invoke(car, 200);
return car;
}
public static void main(String[] args) throws Throwable {
Car car =ReflectTest.initByDefaultConst();
car.introduce();
}
}
分享到:
相关推荐
通过注解+反射实现自定义验证 工具,可扩展业务校验,一个字段可进行多种校验,如:字段A需要大于字段B并且字段B需要大于字段C并且.....XXX。附使用文档以及源码
利用反射实现类的动态加载
java反射实现javabean转json实例代码.docx
java反射实现数据库增、删、改、查操作Dao
实用结合C#反射实现动态定时器定时任务工具,可结合XML配置文档,实现独立动态的定时配置;用于定时任务执行、消息推送、WebService任务等;附件为程序源码。工具历经多项目验证,不足之处;欢迎交流指正!
应用抽象工厂+反射实现通用数据源设计。来源于北大青鸟内部设计模式讲座。
利用java中的反射,不知道类名的情况下,实现Junit3框架,探知类的结构(属性,构造方法,方法)。
此资源是通过java反射,实现了struts的拦截器和转发请求的功能,实现简单,易懂。
c++ 反射实现原理代码;c++ 反射实现原理代码;c++ 反射实现原理代码;c++ 反射实现原理代码;c++ 反射实现原理代码;
应用抽象工厂+反射实现通用数据源设计
反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
使用反射实现绑定的 ListView,有DataSource属性,可反射中文列名,可自适应列宽度。
学习反射的时候学到的一点东东。 用到的知识点: java.lang.reflect.Array List 集合 内部的实现就是这样的。如果下面的新数组的长度增长原来的一倍,就是Vector集合了。
这个是我自己利用反射机制封装的模仿hibernate的持久层工具,用于学习。里面有我的联系方式,工具类jar包和示例以及源码。有问题或者希望共通学习的同学可以联系我,寻求志同道合之人
C#net反射实现访问类中的私有变量或者方法
JAVA反射PPT,,简单介绍反射的实现和机制,
已经封装好的增删改查操作的源代码,只要继承接口就可以实现增删改查,省时省力。
请自行导入v7包。通过反射实现不同页面的返回。
NULL 博文链接:https://admin-king.iteye.com/blog/2309271
NULL 博文链接:https://arne3166.iteye.com/blog/1046340