黑马程序员技术交流社区
标题:
大家帮忙看下这段关于代理的代码,为什么会出现异常呢?
[打印本页]
作者:
杜成龙
时间:
2013-9-25 22:40
标题:
大家帮忙看下这段关于代理的代码,为什么会出现异常呢?
请大家帮忙看下,这段代码怎么会出现NullPointerException呢?想不通啊~
package cn.itcast.day3;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Collection;
public class ActiveProxy {
public static void main(String[] args) throws Exception{
Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
System.out.println(clazzProxy.getName());
System.out.println("----------begin constructors list----------");
Constructor[] constructors = clazzProxy.getConstructors();
for(Constructor constructor : constructors){
String name = constructor.getName();
StringBuilder sBuilder = new StringBuilder(name);
sBuilder.append('(');
Class[] clazzParams = constructor.getParameterTypes();
for(Class clazzParam : clazzParams){
sBuilder.append(clazzParam.getName()).append(',');
}
if(clazzParams!=null && clazzParams.length != 0)
sBuilder.deleteCharAt(sBuilder.length()-1);
sBuilder.append(')');
System.out.println(sBuilder.toString());
}
System.out.println("----------begin methods list----------");
Method[] methods = clazzProxy.getMethods();
for(Method method : methods){
String name = method.getName();
StringBuilder sBuilder = new StringBuilder(name);
sBuilder.append('(');
Class[] clazzParams = method.getParameterTypes();
for(Class clazzParam : clazzParams){
sBuilder.append(clazzParam.getName()).append(',');
}
if(clazzParams!=null && clazzParams.length != 0)
sBuilder.deleteCharAt(sBuilder.length()-1);
sBuilder.append(')');
System.out.println(sBuilder.toString());
}
System.out.println("----------begin create instance object----------");
Constructor constructor = clazzProxy.getConstructor(InvocationHandler.class);
Collection proxy = (Collection)constructor.newInstance(new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return null;
}
});
System.out.println(proxy);
proxy.clear();
}
}
复制代码
运行的结果最后显示NullPointerException异常,这是为什么呢?请大家指教,谢谢!
作者:
梁贺
时间:
2013-9-25 22:47
$Proxy0
----------begin constructors list----------
$Proxy0(java.lang.reflect.InvocationHandler)
----------begin methods list----------
add(java.lang.Object)
hashCode()
clear()
equals(java.lang.Object)
toString()
contains(java.lang.Object)
isEmpty()
addAll(java.util.Collection)
iterator()
size()
toArray([Ljava.lang.Object;)
toArray()
remove(java.lang.Object)
containsAll(java.util.Collection)
removeAll(java.util.Collection)
retainAll(java.util.Collection)
isProxyClass(java.lang.Class)
getProxyClass(java.lang.ClassLoader,[Ljava.lang.Class;)
getInvocationHandler(java.lang.Object)
newProxyInstance(java.lang.ClassLoader,[Ljava.lang.Class;,java.lang.reflect.InvocationHandler)
wait()
wait(long,int)
wait(long)
getClass()
notify()
notifyAll()
----------begin create instance object----------
null
运行结果,没错啊~~
作者:
神之梦
时间:
2013-9-25 22:56
你最后应该还调用其他方法
作者:
暮雨
时间:
2013-9-25 22:56
运行了一下,并没有出现空指针异常,不知道你是怎么弄的,不过最后输出的proxy确实是一个null值,但是如果你不对proxy进行操作的话应该不会出现异常。运行结果图为:
QQ截图20130925225558.gif
(14.91 KB, 下载次数: 19)
下载附件
2013-9-25 22:56 上传
作者:
罗凯健
时间:
2013-9-25 23:01
空指针异常?没有啊 ,倒是打印了一个null。那是因为你的InvocationHandler里面的invoke方法没有写内容直接return null了。
作者:
杜成龙
时间:
2013-9-26 14:57
不知怎么回事,在我的Myeclipse上运行就是报错啊,奇怪了~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2