浅析java反射

什么是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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值