为什么匿名内部类中用外部类的成员变量,外部类的成员变量必须是final

来源:互联网 发布:nginx版本1.13 编辑:程序博客网 时间:2024/05/16 19:01
public void sessionCreated(HttpSessionEvent se) {// TODO Auto-generated method stub
HttpSessionEvent session = se;
System.out.println("Session创建了");// 10秒后 过期时间// 当一个session过期了,就不能用了,但是他还在内存中 并没有销毁 Tomcat会定期清内存// 或者内存吃紧的时候会清内存// se.getSession().setMaxInactiveInterval(10);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry {Thread.sleep(5000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}session.getSession().invalidate();}}).start();}

因为生存期的问题,当程序从上向下执行结束后,成员变量就会消亡,而上述线程先睡5秒在执行,那么如果成员变量死亡了,线程就使用不了,就会出错。

所以java规定如果是这样那么,成员变量必须加final,把成员变量放在常量池中,延长生命期。


或者定义一个全局变量  


阅读全文
0 0