Java反射机制
Posted Tim_Bergling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java反射机制相关的知识,希望对你有一定的参考价值。
Java反射机制
程序可以访问,检测和修改本身状态或行为的能力。
类的组成:
- 成员变量
- 方法
- 构造方法
发射机制的功能:
- 运行时判断任意一个对象所属的类
- 运行时构造任意一个类的对象
- 运行时判断任意一个类所具有的成员变量和方法
- 运行时调用任意一个对象的方法
- 生成动态代理
相关API
通过一个对象获得完整的包名和类名
动态绑定
interface Animal{
void eat();
void walk();
}
class Dog implements Animal{
@Override
public void eat() {
System.out.println("Dog is eating!");
}
@Override
public void walk() {
System.out.println("Dog is walking!");
}
}
class Cat implements Animal{
@Override
public void eat() {
System.out.println("Cat is eating!");
}
@Override
public void walk() {
System.out.println("Cat is walking!");
}
}
// 代理类
// 1. 方式一
class AnimalProxy implements InvocationHandler{
private Object target;
public AnimalProxy(Object target){
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Invoke AnimalProxy");
Object res = method.invoke(target, args);
return res;
}
}
// 2. 方式二
class newAnimalProxy implements InvocationHandler{
private Object target;
public Object bind(Object target){
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterface(),this);
}
}
// 1. 方式一代理测试
@Test
public void test(){
// 代理Dog类
Animal dog = new Dog();
Animal proxy = (Animal)Proxy.newProxyInstance(dog.getClass().getClassLoader(),dog.getClass().getInterface(),new AnimalProxy(dog));
proxy.eat();
proxy.walk();
// 代理Cat类
Animal cat = new Cat();
Animal proxy = (Animal)Proxy.newProxyInstance(cat.getClass().getClassLoader(),cat.getClass().getInterface(),new AnimalProxy(cat));
proxy.eat();
proxy.walk();
}
// 2. 方式二代理测试
@Test
public void newTest(){
newAnimalProxy proxy = new newAnimalProxy(); // 创建代理类
Animal getDog = (Animal)proxy.bind(new Dog()); // 绑定需要代理的对象(使用接口类)
getDog.eat(); // 调用对象方法
getDog.walk();
}
以上是关于Java反射机制的主要内容,如果未能解决你的问题,请参考以下文章