浅析java反射

来源:互联网 发布:合肥seo 编辑:程序博客网 时间:2024/05/21 15:44

什么是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);    }}
0 0