首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

匿名种中的final

2012-10-30 
匿名类中的final?关于final大家都知道,网上一搜一大片,大体说的都是final的意思就是保证我们所定义的变量

匿名类中的final

?

关于final大家都知道,网上一搜一大片,大体说的都是final的意思就是保证我们所定义的变量的值不可改变或者引用不可改变~~

总所周知,在java匿名类中我们要去使用外部的局部变量或者参数是,这个被匿名类使用的变量必须是final的,但是大家有没有想过为什么必须是final,总不能说他是final我们就写final好了,这做法白痴都会,接下来我们来讲解下其内部原因。

在介绍之前我们首先要讲解下java中的值传递和引用传递的问题,大家都知道java是值传递,例

?

  public static void test(final String s){     class OuterClass$1 extends AbstractClass{        private final String s;        public OuterClass$1(String s){            this.s = s;           }        public void m(){              s = "inner";      System.out.println(s);        }     };      AbstractClassc = new OuterClass$1(s); }

?

?可以看到s对象是被传递到了构造函数当中,当我们在使用m来打印出来,但如果java可以让我们以非final类型的参数传递进去的话。由java值传递可知,我们在匿名类中修改该变量的值,那在外部是不可见的。

举个最常见的例子,大家都写过button,我们为他添加匿名类事件监听器,如果我们在内部里面修改了外部变量的引用,那我们在外面是获取不到修改了的值的,这个可以接受?这也就是上面我们所举的值传递的例子。

?

所以结论出来了,我们在匿名类中需要传递进来final关键字,java希望的是保证内部实现和外在表现的一致性。

?

ok。。写完了自己的一些看法。一些内容参考部分内容参见http://blog.csdn.net/axman/archive/2006/12/25/1460544.aspx

?

?

?

热点排行