我们可以通过JTextField初始化实例变量吗?例如,let x是一个实例变量,我想在单击jbutton时初始化它的值。我想在另一种方法中使用这个x。所以我们可以更新x。
public class CT extends JFrame{
JTextField txtf = new JTextField(20);
JButton btn = new JButton("Click");
JLabel lbl = new JLabel();
int x;
CT(){
setSize(600, 400);
setVisible(true);
setLayout(new FlowLayout());
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int a =Integer.parseInt(txtf.getText());
display(a);
x=a;
}
});
add(btn);
add(txtf);
add(lbl);
}
public void display(int s){
System.out.println(s);
System.out.println(x); //this display zero?? can we update it?
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new CT();
}
}
答案 0 :(得分:1)
声明
x=a;
应该在语句
之前执行display(a);
在您初始化'之前,您正在打印出a和x的值。 X
答案 1 :(得分:0)
显示0
的原因是您致电
display(a);
x=a;
而不是
x=a;
display(a);
但是,在任何一种情况下,这都不是初始化。这只是一项任务。 x
的构造函数完成后,字段CT
未设置为任何内容(嗯,默认值为0)。
重要的是要注意actionPerformed()
中的代码并没有真正在构造函数中调用,只是在其中创建。因此,其中的任何分配都不被视为“初始化”。
初始化和分配有什么区别?如果x
为final
,那么您可以在其中添加值的唯一位置是
初始化程序。 E.g。
final int x = 15;
初始化块。 E.g。
final int x;
{
x = 15;
}
所以这些被认为是“初始化”。 final x
,方法,嵌套类等方法的所有其他赋值都将失败。
由于您未将x
声明为final
,因此您可能不会注意到初始化和分配之间的区别,但您在代码中所拥有的内容绝对是一项任务。