java反射机制-高级特性详解
一.
Java的反射机制是指在程序的运行状态中,可以动态的构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法,这就是JAVA反射的特性。
Java反射机制提供了那些功能:
1. 在运行时判断任意一个对象所属的类;
2.
3.
4.
二.JAVA反射的使用
1.获取class类对象的方式
a.通过Object
例如:
Person
person=new Person();
Class<?>
cls=person.getClass();
Person
person2=( Person) cls.newInstance();
b.
例如:
Class<?> cls=Person.Class();
Person person=( Person) cls.newInstance();
c.通过Class类中静态方法forName()
例如:
Class<?> cls= Class.forName(“包名.
Person person=( Person) cls.newInstance();
2.反射获取构造器方法
a. 获取所有构造器
public Constructor[] getConstructors()
public Constructor[] getDeclaredConstructors()
b.获取单个指定构造器
public
Constructor getConstructor(Class... parameterTypes)
public
Constructor getDeclaredConstructor(Class... parameterTypes)
3.反射获取方法
a.获取所有方法
getDeclareMethods()
b.获取方法的返回值类型
getReturnType()
c.
getParameterTypes();
d.获取指定的方法
getDeclareMethod("
1. 成员变量
a.
getDeclaredFields
b.
getDeclaredField(参数类型.class,....)
2. 父类和父接口
a.
getSuperclass()
b.
getInterfaces()
三.
1.
public class Car {
private String brand;
private String color;
private int maxSpeed;
public Car() {
System.out.println("init 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:" + brand + ";color:" + color + ";maxSpeed:" +
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;
}
}
2.
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();
Class clazz = loader.loadClass("com.smart.reflect.Car");
//②获取类的默认构造器对象并通过它实例化Car
Constructor cons = clazz.getDeclaredConstructor((Class[]) null);
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();
}
}
上一篇: springBoot注解的使用详解
下一篇: java list常用方法简介
评论列表