为什么我可以从内部类中引用非最终字段
public class Selection extends Activity {
int con=0;
但不是非最终变量
public void loadlist() {
int con=0;
我必须改变最终变量吗?
public void loadlist() {
final int con=0;
编辑: 如果我想在方法中声明一个int,我需要使int final。但是当我在外面声明它时(例如在第一个代码块中),情况并非如此。
答案 0 :(得分:4)
我认为您尝试在内部类中使用 con 值。请尝试阅读此article
祝福。
答案 1 :(得分:0)
在代码中使用this.con = 0。它会起作用
答案 2 :(得分:0)
使用但未在内部类中声明的任何局部变量,形式参数或异常参数必须声明为final。
如果您首先创建内部类实例,然后将该变量设置为另一个值,则内部类没有引用该变量的新值,并且无法知道要使用的值。
因此java要求使变量成为final,即承诺不改变它。这使编译器的生活变得简单。当内部类被实例化时,可以复制和记住变量的当前值。
如果使用字段,它始终可以访问,因为内部类具有对它所在的外部类的实例的引用。即使字段发生更改,内部类仍然可以读取它。
C#不那么严格。内部类可以读取和写入其创建范围的所有变量。