如果我想从内部类引用它,为什么我必须做变量final?

时间:2013-06-23 09:19:52

标签: java android

为什么我可以从内部类中引用非最终字段

public class Selection extends Activity {
     int con=0;

但不是非最终变量

public void loadlist() {               
     int con=0;

我必须改变最终变量吗?

public void loadlist() {
     final int con=0;

编辑: 如果我想在方法中声明一个int,我需要使int final。但是当我在外面声明它时(例如在第一个代码块中),情况并非如此。

3 个答案:

答案 0 :(得分:4)

我认为您尝试在内部类中使用 con 值。请尝试阅读此article

祝福。

答案 1 :(得分:0)

在代码中使用this.con = 0。它会起作用

答案 2 :(得分:0)

java specs

  

使用但未在内部类中声明的任何局部变量,形式参数或异常参数必须声明为final。

如果您首先创建内部类实例,然后将该变量设置为另一个值,则内部类没有引用该变量的新值,并且无法知道要使用的值。

因此java要求使变量成为final,即承诺不改变它。这使编译器的生活变得简单。当内部类被实例化时,可以复制和记住变量的当前值。

如果使用字段,它始终可以访问,因为内部类具有对它所在的外部类的实例的引用。即使字段发生更改,内部类仍然可以读取它。

C#不那么严格。内部类可以读取和写入其创建范围的所有变量。