黑马程序员技术交流社区

标题: 方法的参数为什么要使用final 修饰呢? 为什么不用final... [打印本页]

作者: jinhu358    时间: 2013-5-6 00:43
标题: 方法的参数为什么要使用final 修饰呢? 为什么不用final...
本帖最后由 jinhu358 于 2013-5-9 15:53 编辑

        
方法的参数为什么要使用final 修饰呢?    为什么不用final就报错了?
private static Object getProxy(final Object target,final Advice advice) {
                Object proxy3 = Proxy.newProxyInstance(
                                target.getClass().getClassLoader(),
                                /*new Class[]{Collection.class},*/
                                target.getClass().getInterfaces(),
                                new InvocationHandler(){
                                        public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
                                                advice.beforeMethod(method);
                                                Object retVal = method.invoke(target, args);
                                                advice.afterMethod(method);
                                                return retVal;                                                
                                                
                                        }
                                }
                                );
                return proxy3;
        }

2013-05-06_003848.png (69.54 KB, 下载次数: 0)

2013-05-06_003848.png

作者: 黑马伍哲沂    时间: 2013-5-6 07:23
还没学到那来,顶帖后默默飘走。
作者: ZhaoYuBetter    时间: 2013-5-9 10:09
因为你这里用到里 匿名内部类,因为局部变量的范围在该方法内,当一个方法结束时,局部变量消失。
但定义在这个类中的内部类对象仍然是存在的,即内部类对象不能使用局部变量了。final定义的局部变量是个常量,它的生命周期超出方法运行的生命周期。
作者: 袁杰    时间: 2013-5-9 11:55
因为在这个方法中,传进来的参数相当于方法的局部变量,而在后面的匿名内部类中用到了,这个参数,想要在内部类中用局部变量,该局部变量必须是final修饰的。
作者: Miss小强    时间: 2013-5-9 12:19
只要记住一句话:内部类访问局部变量,该变量必须是final型的,如果想深究的话,有一个博客
去看下吧:http://rongqiang1992.blog.163.com/blog/static/21727620920133270335138/
里面讲清楚了来龙去脉,不过有点难懂。。。




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