好的,我的问题如下:
假设您有类似下面的课程。在运行期间:
每次运行循环时都会创建一个新的动作侦听器吗?
第二类比第一类更有效吗?
在第一个类中是否有100个新的ActionListener对象被创建?
public class Foo extends JFrame {
public Foo() {
for (int i = 0; i < 100; i++) {
JTextField someField = new JTextField();
someField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//DO SOMETHING HERE
}
});
}
}
}
类似于:
public class Foo extends JFrame {
public Foo() {
ActionListener someActionListener = new ActionListener(){
public void actionPerformed(ActionEvent e) {
//DO SOMETHING HERE
}
};
for (int i = 0; i < 100; i++) {
JTextField someField = new JTextField();
someField.addActionListener(someActionListener);
}
}
}
答案 0 :(得分:4)
第二个例子可以节省1-2 KB(价值约0.003美分),但鉴于功能不一样,正确性更重要。
相比之下,你在最低工资上的1秒钟的价值是0.2美分,所以如果你花了不到一秒的时间考虑它,那可能是浪费时间。 ;)答案 1 :(得分:2)
在第一个程序中,您运行new ActionListener()
100次。最终会得到100个ActionListener
个对象。
在第二个程序中,您只运行new ActionListener()
一次。因此,您最终只会得到1 ActionListener
个对象。
显然,在第一个程序中,你占用了更多的内存。但是这些程序并不相同,因为第一个程序中JTextField
有ActionListener
,而第二个程序中它们共享一个。{/ p>
答案 2 :(得分:1)
每次循环时都会创建一个新的动作侦听器 运行
在第一堂课中,是的。
第二类比第一类更有效吗?
第二个类为每个新JTextField()
对象提供相同的动作侦听器。这样更有效(节省一些内存)。但是,您应该知道所有100个JTextField()
对象都具有相同的动作侦听器。
此外,如果您打算这样做,则应将someActionListener = new ActionListener()
移至Foo