今天在写代码时发现,在一个内部类中用外部类中的对象,该对象必须要final修饰。
public static void main(String[] args) {
final OutPuter outputer = new OutPuter();
new Thread(new Runnable() {
@Override
public void run() {
for(int i=1;i<=50;i++){
outputer.sub(i);
}
}
}).start();
for(int j = 1;j<=50;j++){
outputer.main(j);
}
}
final的用法就不需要再多说le
就那这个代码来说,内部类thread在main方法执行完后不会随着方法被GC回收,而方法中的outputer对象可以看做是一个局部变量,在方法执行完后就会被回收,而在内部类中却还有继续用这个outputer对象,所以要用final修饰该对象,使其会在内部类中复制一份副本给内部类使用。当然它的值是不会改变的。