import javax.swing.*;
class A
{

public static void main(String args[])
{
JButton jb = new JButton("jb");
class Inner
{
public void f()
{
jb = null;  //这里好象出错。。
}
}
}
}

解决方案 »

  1.   

    你既然从内部类中访问局部变量 jb;就需要将 jb 声明为最终类型final,
    而且一旦将 jb 声明为最终类型final就不能再次为jb赋值了
      

  2.   

    你既然从内部类中访问局部变量 jb;就需要将 jb 声明为最终类型final, 
    为什么?????????
      

  3.   

    局部内部类可以访问外部类的成员,但不能访问同在一个局部的普通局部变量,但可以访问final的局部变量.
    原因如下:
    1.普通的局部变量随着所在语句块的执行结束而消亡,而创建的局部内部类对象并不会随着语句块的结束而消亡.如果在语句块结束后,调用了局部内部类对象中访问普通局部变量的方法就会出现问题,因为此时要访问的局部变量不存在了.
    2final的局部变量的存储方式与普通局部变量不同,其不会因为语句块的结束而消失,还会长期存在,因此可以被局部内部类访问interface ForInner {   //声明局部内部类要实现的接口
    void sayHello();
    }class Outter {
    //声明外部类将指向局部内部类对象的引用
    ForInner forInner = null;
    public void getInner() {
    final String str = "zeng"; 
    //定义局部内部类
    class Inner implements ForInner {
    public void sayHello() {
    System.out.println("您好!" + str);
    }
    }
    //创建局部内部类对象
    forInner = new Inner();
    }
    }
    public class Test {
    public static void main(String[] args) {
    //创建外部类对象
    Outter o = new Outter();
    //调用外部类中的getInner方法
    o.getInner();
    //调用局部内部类对象的sayHello方法
    o.forInner.sayHello();
    }
      

  4.   

    局部内部类可以访问定义该类的作用字段中的所有变量,包括局部变量、方法参数、实例变量(假设是一个非静态语句块)和静态变量。唯一的限制是局部变量或方法参数只有在声明成final时才可以使用。规定这种限制的主要原因是由于多线程问题,其次是为了确保从内部类访问这些变量时,他们都有明确定义的值。假设访问局部变量或参数的方法可以在定义局部类的方法执行完成以后调用(此时局部变量和参数都不再存在了),那么这些变量的值就必须在局部类对象创建之前冻结。如果有必要,可将非final变量拷贝到即将被局部内部类访问的final变量中。好像是 The Java Programming Language上的说明 。
      

  5.   


    import javax.swing.*;
    class A
    {
        JButton jb = new JButton("jb");
        public static void main(String args[])
        {
                    class Inner
            {
                public void f()
                {
                    jb = null;  //这里好象出错。。
                }
            }
        }
    }
    这样可以不?
      

  6.   


    import javax.swing.*;
    class A
    {
        JButton jb = new JButton("jb");
        public static void main(String args[])
        {
                    class Inner
            {
                public void f()
                {
                    jb = null;  //这里好象出错。。
                }
            }
        }
    }
    这样可以不?
      

  7.   


    import javax.swing.*; 
    class A 

        static JButton jb = new JButton("jb");//JButton jb = new JButton("jb"); 
        public static void main(String args[]) 
        { 
                    class Inner 
            { 
                public void f() 
                { 
                    jb = null;  //这里好象出错。。 
                } 
            } 
        } 
    } 这样可以
      

  8.   


    import javax.swing.*; 
    class A 

        JButton jb = new JButton("jb");
        public void main(String args[]) 
        { 
            class Inner 
            { 
                public void f() 
                { 
                    jb = null;  //这里好象出错。。 
                } 
            } 
        } 
    }这样才行
      

  9.   

    只知道声明为final的类和属性都不能被继承!!!