package com.te;
public interface Interfa {
public String retu();
public int re(Integer a,Integer b);
}
package com.te;
public class Realizeclass implements Interfa{
@Override
public String retu() {
// TODO Auto-generated method stub
return "ABC";
}
@Override
public int re(Integer a, Integer b) {
// TODO Auto-generated method stub
return a+b;
}
}
package com.te;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Maind {
public static void main(String[] args) {
// TODO Auto-generated method stub
Interfa realize=new Realizeclass();
Object object=Proxy.newProxyInstance(//代理类
realize.getClass().getClassLoader(), //目标类
realize.getClass().getInterfaces(),//接口
new InvocationHandler() {//内部类实现方法拦截
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
Object result=method.invoke(realize, args);
if(args!=null&&args.length>0) {
System.out.println(args[0]+"dddd"+args[1]);
}
if(result instanceof String) {
return result.toString().toLowerCase();
}else if(result instanceof Integer) {
return ((int)result%10);
}
return result.toString();
}
}
);
Interfa fian=(Interfa)object;
String result=fian.retu();//调用目标方法后被拦截
int c=fian.re(3, 4);//调用目标方法后被拦截
System.out.println(result);
System.out.println(c);
}
}
toString方法是Object类里的一个实例方法,所有Java类都是object类的子类,因此所有Java对象都具有toString方法。
不仅如此,所有Java对象都可以和字符串进行连接运算,当Java对象和字符串进行连接运算时,系统自动调用Java对象toString()方法返