Java的反射机制

来源:互联网 发布:视频面试软件 编辑:程序博客网 时间:2024/06/10 09:12
package com.mrge.reflect;public class Car {private String brand;private String color;private int 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;}public Car(){}public Car(String brand,String color,int maxSpeed){this.brand=brand;this.color=color;this.maxSpeed=maxSpeed;}public void introduce(){System.out.println("Brand is "+brand+"Color is "+color+"Max Speed is "+maxSpeed);}}
怎样实例化Car对象,使用Java的反射机制来实现:
package com.mrge.reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class ReflectTest {public static Car initByDefaultConst()throws Throwable{//通过类装载器获取Car类对象ClassLoader loader=Thread.currentThread().getContextClassLoader();//ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件                Class clazz=loader.loadClass("com.mrge.reflect.Car");//获取类的默认构造器对象并通过它实例化CarConstructor cons=clazz.getDeclaredConstructor((Class[])null);Car car=(Car)cons.newInstance();//效果等同于Car car=new Car();//通过反射方法设置属性Method setBrand=clazz.getMethod("setBrand",String.class);setBrand.invoke(car, "宝马X7");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();}}这样实现了Car类的实例化,并调用了对象!这也遵循一个规律,那就是先类(Class)---->构造函数(Constructor)---->方法(Method).
原创粉丝点击