黑马程序员技术交流社区
标题:
关于final的用法,内部类不能访问在另外一个方法中的非终态
[打印本页]
作者:
silence
时间:
2012-3-8 23:36
标题:
关于final的用法,内部类不能访问在另外一个方法中的非终态
package threads;
public class MultiThreadShareData {
public static void main(String[] args) {
MultiThreadShareData x = new MultiThreadShareData();
SharingData data = x.new SharingData();
final Thread1 thread1 = x.new Thread1(data);//此两句中如果没有final,编译会有错误,为什么???
final Thread2 thread2 = x.new Thread2(data);//此两句中如果没有final,编译会有错误,为什么???
for(int i = 0; i < 2; i++){
new Thread(new Runnable(){
@Override
public void run() {
while(true){
thread1.decrease();//错误会出现与此,请注意
}
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
while(true){
thread2.increase();////错误会出现与此,请注意
}
}
}).start();
}
}
class Thread1{
private SharingData data;
public Thread1(SharingData data){
this.data = data;
}
public void decrease(){
data.decrease();
}
}
class Thread2{
private SharingData data;
public Thread2(SharingData data){
this.data = data;
}
public void increase(){
data.increase();
}
}
class SharingData{
private int data = 100;
public synchronized void increase(){
data++;
System.out.println(Thread.currentThread().getName() + " is increasing the data " + data);
}
public synchronized void decrease(){
data--;
System.out.println(Thread.currentThread().getName() + " is decreasing the data " + data);
}
}
}
作者:
刘基军
时间:
2012-3-9 00:15
规定:局部内部类访问局部变量时,必须将局部变量进行final关键字修饰。
作者:
a504079589
时间:
2012-3-9 00:54
在方法中的内部类中访问方法中的局部变量时,这个变量必须是final的;
因为,局部变量在方法运行结束之后生命周期就结束了,而内部类对象的生命周期还有可能没结束,为了能够访问到这个变量,就需要加上finla;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2