局部內部類是指位於方法內的類,局部內部類若要訪問其所在方法內的變量,則該變量必須是final修飾的。
public static void main(String[] args) { int a = 3; // 應當使用final修飾變量a class Inner{ public void printA() {System.out.println("a = " + a);} } }
Inner是位於方法main()內的局部內部類,若要訪問方法內的局部變量a,則a應當使用final修飾。
被內部類訪問的局部變量會被拷貝一份到內部類中,即Inner中存在一個成員變量,用於記錄局部變量a的值。若局部變量不是final的,其取值就可以被修改,而Inner對象中保存的是其原來的值,這就會出現數據不同步的問題。
Java為了避免數據不同步的問題,做出了內部類只可以訪問final的局部變量的限制。
在java8中,可以不使用final,如果局部變量被內部類訪問,那么該局部變量相當於自動使用了final修飾。