黑马程序员技术交流社区

标题: 动态类问题 [打印本页]

作者: 何苦似梦离    时间: 2014-2-11 11:03
标题: 动态类问题
本帖最后由 何苦似梦离 于 2014-2-11 21:03 编辑

Collection px2 = (Collection)Proxy.newProxyInstance(
                                                        Collection.class.getClassLoader(),
                                                        new Class[]{Collection.class},
                                                        new InvocationHandler()
                                                        {
                                                                ArrayList target = new ArrayList();
                                                                @Override
                                                                public Object invoke(Object proxy, Method method, Object[] args)
                                                                                throws Throwable
                                                                {
                                                                        
                                                                        return method.invoke(target, args);
                                                                        // TODO Auto-generated method stub
                                                               
                                                                }
                                                        }
                                                        );
                px2.add("213"); //这里每次调用都会去找invoke方法,是不是InvocationHandler的对象是唯一的,不然怎么操作同一数据
                px2.add("212");        
                px2.add("2g");        
                System.out.println(px2.size());问题就是想问 new InvocationHandler()这个匿名内部类的生命周期




作者: itpower    时间: 2014-2-11 11:38
我也想知道它是什么时候被销毁的,
作者: itpower    时间: 2014-2-11 11:39
InvocationHandler 是代理实例的调用处理程序 实现的接口。

每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。

作者: e.c    时间: 2014-2-11 20:00
Proxy.Proxy.newProxyInstance(Collection.class.getClassLoader(),
                   new Class[]{Collection.class},
                   new InvocationHandler())
会创建一个代理类对象。对象内部有一个InvocationHandler类型的变量h指向new InvocationHandler()创建的对象
px2又引用了Proxy创建的代理类对象。
所以只要px2在,且引用着Proxy创建的代理类对象。那么new InvocationHandler()创建的对象就一直在。
作者: e.c    时间: 2014-2-11 20:02
e.c 发表于 2014-2-11 20:00
Proxy.Proxy.newProxyInstance(Collection.class.getClassLoader(),
                   new Class[]{Coll ...

如果这样px2 =null;
那么Proxy创建的代理类对象和new InvocationHandler()创建的对象就是可回收的。*向上没有被引用)。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2