什么是非最终变量?

Che*_*ppa 3 java blackberry java-me

我不理解final变量的概念.在一个for循环中,我有动态变量i,这对我来说引用数组至关重要.一旦我使用i它,它会引发一个错误,说它应该是final.

到底是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);
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 10

匿名内部类只能访问final外部作用域中的变量.由于i不是最终的,因此无法直接访问.i由于需要更改,因此无法进行最终决定,并且无法更改最终变量.

作为一个简单的解决方法,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);
}
Run Code Online (Sandbox Code Playgroud)