0

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

public class Selection extends Activity {
     int con=0;

但不是非最终变量

public void loadlist() {               
     int con=0;

我必须将变量设为 final 吗?

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

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

4

3 回答 3

4

我认为您尝试在内部类中使用con值。尝试阅读这篇文章

最好的祝愿。

于 2013-06-23T09:25:54.483 回答
0

在您的代码中使用 this.con = 0。它会工作

于 2013-06-23T09:28:28.813 回答
0

java规范

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

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

所以java要求使变量最终,即承诺不改变它。这使编译器的工作变得轻松。当内部类被实例化时,可以复制和记住变量的当前值。

如果你使用一个字段,它在任何时候都可以访问,因为内部类引用了它所在的外部类的实例。即使字段发生变化,内部类仍然可以读取它。

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

于 2013-06-23T14:32:54.957 回答