JAVA求在局部内部类中,写了一个事件监听器,在里面改如何引用外部类的对象数组?急求!!!!!!

例如:
class A
{
pulbic A(int n,String name)
{
num=n;
name=name;
}
A arr[]=new arr[5];
public void SetNum(int number)
{
this.num=number;
}
-------------(省略界面代码)
button1.addActionListener(new handler());
class handler implements ActionListener
{
public actionPerformed(ActionEvent e)
{
arr[i].setNum(100);//这里会报错,说arr[i]没有定义
}
}
private int num;
private String name;
]
报错原因是arr[i]没有定义,请问我要怎么样才能引用到arr[i]对象呢?
或者还有没有方法,可以达到我想要的效果呢?(即在局部内部类(即方法类)中访问设置到外部类对象数组属性)

第1个回答  2012-11-12
........好多极低错误
你这个根本通不过编译
..看起来和原来不太一样 但是大概意思应该是一样的

至于你说的
arr[i].setNum(100);//这里会报错,说arr[i]没有定义

arr[i]这个数组定义本身就是错误 A arr[]=new arr[5];是什么???应该是A arr[]=new A[5];

还有这种注册事件的话最好使用匿名内部类 还有这个如果写在main方法里也会保存
如果写在main方法里的话需呀先实例化外部类对象才能

public static void main(String[] args)
{
A a = new A();//这里注意加参数.......你自己写的要不也保错
button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
a.arr[0].setNum(100);
}
});

}

public class A
{
private int num;
private String name;
A arr[]=new A[5];

public A(int n,String name)
{
num=n;
name=name;

Button button1 =new Button();

button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
arr[0].setNum(100);
}
});
}

protected void setNum(int i) {
// TODO Auto-generated method stub

}

public void SetNum(int number)
{
this.num=number;
}

}本回答被提问者和网友采纳
第2个回答  2012-11-13
safdasd

JAVA代码中匿名内部类如何改变外部的变量呢?
如果外部变量是外部类的本地变量(如在方法中定义的变量),必须声明成final才能在内部类中使用,正常是不可以修改这个变量的,但如果变量是对象,可以修改对象内的属性 如果外部变量是外部类的成员变量或类变量,内部类可以直接修改

Java面试题—内部类和静态内部类的区别
然而,静态内部类不能访问外部类的非静态成员,这是它们与非静态内部类的一个主要区别。在性能方面,字符串的处理方式有着微妙的差异。String\/StringBuffer\/StringBuilder各有优势:String在创建新对象时效率较低,适合直接拼接;StringBuilder在单线程中表现最佳,提供了动态修改功能;StringBuffer则提供线程安全...

java 中的语法到底指的什么?
两者都有内部类和局部类的语法和语义 Java中没有友元函数和友元类的概念,严格支持封装,不允许外部方法访问类的私有成员 而C++支持friend关键字,允许外部方法访问类的私有成员,因此不是一种纯面向对象的编程语言 Java中类或interface可以用public修饰,也可以不修饰;而C++类不能修饰 三种访问权限的语义...

在Java程序的一个包中的一个类里用了主函数,那么在另一个类中可以再用...
可以。比如你的程序Test.java中有两个类,分别为class A{} class B{},这两个类中都可以有main()函数,当你编译完文件后,即javac Test.java后,如果想运行A类中的main()方法就用java A,如果想运行B类中的main()就用java B 如果还不明白就HI我吧 ...

用数组的形式为什么匿名内部类可以修改局部变量的值,而且前面也用final...
作用是使isFinish只能被赋值一次,即isFinish一旦引用了某个数组对象,就不能再改为引用另一个数组对象。即:final boolean[] isFinish={false};是允许的,而再赋值:isFinish=new boolean[] {true};是不允许的。但isFinish引用的原数组对象的元素是可以修改的,即:isFinish[0]=true;是可以的。

Java面试题—内部类和静态内部类的区别
3. 静态内部类只能引用外部类的静态的属性及方法。内部类依赖于外部类的存在,而静态内部类则可以完全独立,理解这一点很容易。非静态内部类不能有静态成员变量或静态方法的原因是静态类型的属性和方法在类加载时存在于内存中,使用它们需要类加载到虚拟机中。非静态内部类不随外部类一起加载,只有在实例...

一般在什么情况下使用内部类,主要有什么作用?高手们欢迎
要想实现这个功能,内部类对象就必须有指向外部类对象的引用。Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。 有人会问,如果内部类里的一个...

问一个JAVA的小问题
java编译器当然会阻止这种情况的发生。第2行会导致一个编译错误。总之,如果Foo是Bar的一个子类型(子类或者子接口),而G是某种泛型声明,那么G是G的子类型并不成立!! 这可能是你学习泛型中最难理解的部分,因为它和你的直觉相反。这种直觉的问题在于它假定这个集合不改变。我们的直觉认为这些东西都不可改变。 举例...

java异常处理小知识!!!
由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,接口里面的属性在默认状态下面都是public static,...

java编码规范有哪些?
(3) 对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。 (4) 应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。

相似回答