什么是java反射?
主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!
那么使用java反射机制的作用:
1反编译:.class–>.java
2通过反射机制访问java对象的属性,方法,构造方法等;
package com.cxg.demo.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
/**
* Title: java反射测试
* Description: TestDemo
* @author lu
* @date 2016年7月4日 上午11:53:02
*/
public class reflect {
public static Car initByDefaultConst() throws Throwable {
//1.通过类装载器获取Car类对象
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class<?> clazz = loader.loadClass("com.cxg.demo.test.Car");
//2.获取类的默认构造器对象并通过它实例化Car
Constructor<?> cons = clazz.getConstructor((Class[])null);
Car car = (Car) cons.newInstance();
//3.通过反射方法设置属性
Method setBrand = clazz.getMethod("setBrand",String.class);
setBrand.invoke(car,"奥迪A6");
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 = initByDefaultConst();
car.introduce();
}
}
实体类代码:
package com.cxg.demo.test;
/**
* Title: 实体类
* Description: TestDemo
* @author lu
* @date 2016年7月4日 下午1:43:16
*/
public class Car {
private String brand;
private String color;
private int maxSpeed;
//无参构造方法
public Car() {
super();
}
//有参构造函数
public Car(String brand, String color, int maxSpeed) {
super();
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
}
//get和set方法
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;
}
public void introduce() {
System.out.println("car introduce==>"+brand+";"+color+";"+maxSpeed);
}
}