public class SliderTest
{
public static void main(String[] args)
{ JFrame f=new JFrame();
f.setSize(100,100);
f.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
JTextField textField=new JTextField(20);
f.getContentPane().add(textField);
textField=new JTextField(10);
f.getContentPane().add(textField);
f.show();
}
}
程序执行没问题,但是我有个疑问,textField能被new二次吗?
{
public static void main(String[] args)
{ JFrame f=new JFrame();
f.setSize(100,100);
f.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
JTextField textField=new JTextField(20);
f.getContentPane().add(textField);
textField=new JTextField(10);
f.getContentPane().add(textField);
f.show();
}
}
程序执行没问题,但是我有个疑问,textField能被new二次吗?
在这一点上,跟下面这个几乎没什么区别。
int i = 5;
System.out.println(i);
i = 6;
System.out.println(i);
其中i被赋值了两次。关键在于你原来的说法有问题:“textField能被new二次吗?”,textField只是个变量,它没有被“new两次”,一次也没有,它只被赋值了两次而已。
new返回一个新对象的引用,因此可以赋给一个变量名。你上面的代码从效果上完全可以改成:
f.getContentPane().add(new JTextField(10));
所以,textField只是个记号而已。
textfield又不是static也不是finnal,它所占有的空间是可以改变的!第一个textfield对应的对象是 new JTextField(20)引用所指向的对象
第二个textfield对应的对象是 new JTextField(10)引用所指向的对象第一个对象被第二个覆盖了