import javax.swing.*;
class A
{
public static void main(String args[])
{
JButton jb = new JButton("jb");
class Inner
{
public void f()
{
jb = null; //这里好象出错。。
}
}
}
}
class A
{
public static void main(String args[])
{
JButton jb = new JButton("jb");
class Inner
{
public void f()
{
jb = null; //这里好象出错。。
}
}
}
}
而且一旦将 jb 声明为最终类型final就不能再次为jb赋值了
为什么?????????
原因如下:
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();
}
}
import javax.swing.*;
class A
{
JButton jb = new JButton("jb");
public static void main(String args[])
{
class Inner
{
public void f()
{
jb = null; //这里好象出错。。
}
}
}
}
这样可以不?
import javax.swing.*;
class A
{
JButton jb = new JButton("jb");
public static void main(String args[])
{
class Inner
{
public void f()
{
jb = null; //这里好象出错。。
}
}
}
}
这样可以不?
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; //这里好象出错。。
}
}
}
} 这样可以
import javax.swing.*;
class A
{
JButton jb = new JButton("jb");
public void main(String args[])
{
class Inner
{
public void f()
{
jb = null; //这里好象出错。。
}
}
}
}这样才行