Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是非最终变量?_Java_Blackberry_Java Me - Fatal编程技术网

Java 什么是非最终变量?

Java 什么是非最终变量?,java,blackberry,java-me,Java,Blackberry,Java Me,我不理解final变量的概念。在for循环中,我有一个动态变量I,它对我引用数组至关重要。我一使用I,它就会抛出一个错误,告诉我应该是final 什么是最终版?你能帮我消除那个错误吗 我的代码在这里: for( int i = 0; i <4; i++) { Bitmap celeb1=Bitmap.getBitmapResource(fimagearray[i]); Bitmap celeb1_focus=Bitmap.getBitmapResource(fimagearr

我不理解
final
变量的概念。在
for
循环中,我有一个动态变量
I
,它对我引用数组至关重要。我一使用
I
,它就会抛出一个错误,告诉我应该是
final

什么是
最终版
?你能帮我消除那个错误吗

我的代码在这里:

for( int i = 0; i <4; i++)
{

   Bitmap celeb1=Bitmap.getBitmapResource(fimagearray[i]);
   Bitmap celeb1_focus=Bitmap.getBitmapResource(fimagearray[i]);
   ImageButton celebbutton = new ImageButton(celeb1, celeb1_focus);

   celebbutton.setChangeListener(new FieldChangeListener() {

       public void fieldChanged(Field field, int context) 
       {
           UiApplication.getUiApplication().pushScreen(new FetchTweets(fusernamearray[i]));

       }
   });


   femaleSec.add(celebbutton);
}

for(int i=0;i最终变量只能通过初始值设定项或赋值语句初始化一次

查看它的链接


再看一个例子。

匿名内部类只能从外部作用域访问
final
变量。由于
i
不是final,所以不能直接访问它。您不能将
i
设为final,因为它需要更改,并且final变量不能更改

作为一种简单的解决方法,在每次循环迭代期间将
i
的值复制到最终变量中:

for( int i = 0; i < 4; i++)
{
    final int index = i; // <-- copy i to `index' to use in FieldChangeListener

    // ...

    celebbutton.setChangeListener(new FieldChangeListener() {

        public void fieldChanged(Field field, int context) 
        {
            UiApplication.getUiApplication().pushScreen(
               new FetchTweets(fusernamearray[index])); // <-- `index'
        }
    });


    femaleSec.add(celebbutton);
}
for(int i=0;i<4;i++)
{

final int index=i;//您正试图在“匿名内部类”中使用
i
的值,该类要求将该类的所有非局部变量声明为
final
,这意味着一旦初始化变量,其值可能不会更改


@aix发布的解决方案可以解决您的问题。

无法从您的代码中分辨出来-如果您可以发布stacktrace,这将非常有用-但是如果您想将局部变量传递给新线程,通常需要将它们声明为
final
,您正在调用的方法之一可以。请尝试创建
i的
final
版本
并且使用它:
final int j=i;
final
,顺便说一句,这意味着变量的值不能被重新赋值。如果变量是不可变的,(如原语或
字符串
s),这意味着它不能被更改。如果它是一个可变对象,则变量不能更改为引用其他对象,但对象的内部仍然可以更改。@Russell:“无法从您的代码中分辨”[sic]那么我想我没有引起足够的注意!:-)我希望所有这些单元格都有一个FieldChangeListener,并在fieldChanged中从单元格字段索引计算索引。非常感谢您让我了解最终变量,在我尝试在for循环之前将“index”变量声明为final之前,这就是为什么每次“index”值以前是0…现在,问题解决了,就像在你的代码中一样,每次它进入循环时,你都将“i”声明为final…非常感谢让我理解!!!:)这解决了我的问题谢谢链接…这很有用