java反射
java反射
java反射机制
按照百度百科的解释,即:Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。
Class发射对象描述类的语义结构,可以从Class对象中获取构造函数、成员变量、方法类等元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。这些反射对象类在java.reflect包中定义。主要如下:
Constructor:类的构造函数的反射类,通过Class.getConstructors()方法可以获取类的所有构造函数反射对象数组。
Method:类方法的反射类,通过Class.getDeclaredMethods()方法可以获取类的所有方法反射类对象数组
Field:类的成员变量反射类,通过Class.getDeclaredField(String name)方法可以获取类的成员变量反射对象的数组。
如下代码:
通过反射来构造对象
public class ReflectTest {
public static void main(String[] args) throws Exception {
//反射主要有以下几种方式
//方式一
Class aClass=Car.class;
//方式二
Class<?> aClass1 = Class.forName("com.rookie.bigdata.reflect.Car");
//方式三
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
Class<?> aClass2 = contextClassLoader.loadClass("com.rookie.bigdata.reflect.Car");
Constructor<?> declaredConstructor = aClass2.getDeclaredConstructor();
Car car = (Car) declaredConstructor.newInstance();
Method setBrand = aClass2.getMethod("setBrand", String.class);
setBrand.invoke(car,"宝马");
Method setColor = aClass2.getMethod("setColor", String.class);
setColor.invoke(car,"黑色");
System.out.println(car);
}
}
Car
public class Car {
private String brand;
private String color;
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;
}
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", color='" + color + '\'' +
'}';
}
}