Java 反射

来源:互联网 发布:上海知柚公司图片 编辑:程序博客网 时间:2024/06/03 17:09

实例

public class Car {private String brand;private String color;private int maxSpeed;/** * @return the brand */public String getBrand() {return brand;}/** * @param brand the brand to set */public void setBrand(String brand) {this.brand = brand;}/** * @return the color */public String getColor() {return color;}/** * @param color the color to set */public void setColor(String color) {this.color = color;}/** * @return the maxSpeed */public int getMaxSpeed() {return maxSpeed;}/** * @param maxSpeed the maxSpeed to set */public void setMaxSpeed(int maxSpeed) {this.maxSpeed = maxSpeed;}public Car() {super();// TODO Auto-generated constructor stub}public Car(String brand, String color, int maxSpeed) {super();this.brand = brand;this.color = color;this.maxSpeed = maxSpeed;}/* (non-Javadoc) * @see java.lang.Object#toString() */@Overridepublic String toString() {return "Car [brand=" + brand + ", color=" + color + ", maxSpeed="+ maxSpeed + "]";}public void introduce(){System.out.println(this.toString());}}

import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class ReflectTest {public static Car initByDefaultConst() throws Throwable{ClassLoader loader = Thread.currentThread().getContextClassLoader();Class clazz = loader.loadClass("com.gfzs.ioc.Car");Constructor cons = clazz.getDeclaredConstructor();Car car = (Car)cons.newInstance();Method setBrand = clazz.getMethod("setBrand", String.class);setBrand.invoke(car, "红旗CA72");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();}}

反射可以绕过Java的封装访问private、protected成员变量和方法,但必须通过setAccessible(true)取消Java语言检测。

0 0