Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们可以通过JTextField初始化实例变量吗?_Java_Swing_Variables_Jtextfield - Fatal编程技术网

Java 我们可以通过JTextField初始化实例变量吗?

Java 我们可以通过JTextField初始化实例变量吗?,java,swing,variables,jtextfield,Java,Swing,Variables,Jtextfield,我们可以通过JTextField初始化实例变量吗?例如,lets 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

我们可以通过JTextField初始化实例变量吗?例如,lets 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();
}
}
声明

x=a;
display(a);
应该在语句之前执行

x=a;
display(a);

在“初始化”x之前,您正在打印a和x的值。

它显示
0
的原因是您调用了

display(a);
x=a;
而不是

x=a;
display(a);
但是,无论哪种情况,这都不是初始化。这只是一个简单的任务。当
CT
的构造函数完成时,字段
x
没有设置为任何值(好吧,它是0,默认值)

需要注意的是,
actionPerformed()
中的代码并不是在构造函数中真正调用的,而是在构造函数中创建的。因此,其中的任何分配都不被视为“初始化”

初始化和赋值之间有什么区别?如果
x
final
,那么可以在其中输入值的唯一位置是

  • 初始化器。例如

    final int x = 15;
    
  • 初始化块。例如

    final int x;
    
    {
        x = 15;
    }
    
  • 在构造函数内部
因此,这些被认为是“初始化”。在方法、嵌套类的方法等中,对
final x
的所有其他赋值都将失败

由于您没有将
x
声明为
final
,因此您可能没有注意到初始化和赋值之间的区别,但代码中的内容肯定是赋值