【问题标题】:getting default values of variables during run time in java在java中运行时获取变量的默认值
【发布时间】:2012-04-19 01:52:23
【问题描述】:

当我在 Eclipse 中运行这个程序时,我得到了变量的默认值,而不是我在运行时输入的值。当我运行程序时,我得到了在构造函数public account() 中分配的变量的默认值,而不是我在运行时输入的那些值。有人可以解释一下为什么会发生这种情况。

这是我的代码...

public class bank {
    public static void main(String[] args){
        account[] obj=new account[3]; 

        for(int i=0;i<3;i++){
            obj[i]=new account();
            obj[i].entry();
            obj[i].display();
        }

        for(int i=0;i<3;i++){
            obj[i]=new account();
            String res=obj[i].getCustomer_name();
            JOptionPane.showMessageDialog(null, res);
        }

        account obj=new account();
        obj.entry();
        obj.display();
    }

}

class account {
    private String customer_name;
    private int acc_num;
    private double open_balance;

    public account() {
        customer_name="ADAM";
        acc_num=001;
        open_balance=100;
    }

    public void entry() {
        String customer_name=JOptionPane.showInputDialog(null, "Enter the customer name");
        String acc_num=JOptionPane.showInputDialog(null, "Enterthe account number");
        String open_balance=JOptionPane.showInputDialog(null, "Enter the balance");

        int acc_num1=Integer.parseInt(acc_num);
        double open_balance1=Double.parseDouble(open_balance);
    }

    public void display() {
        JOptionPane.showMessageDialog(null,customer_name);
    }

    public String getCustomer_name() {
        return customer_name;
    }
}

【问题讨论】:

  • 调试这个问题时会发生什么?代码在什么时候没有按照您期望的方式运行?哪一行代码偏离了预期的执行?发生这种情况时,相关对象的状态是什么?除了“这不起作用,请帮我解决”之外,您还需要向我们提供更多信息。

标签: java variables constructor


【解决方案1】:

问题是阴影:当您在方法中声明与成员变量同名的变量时,它会隐藏成员变量。

例如

class MyClass{
    int var = 12;

    void shadows(){
        int var = 5;
        System.out.println(var); // prints 5
        System.out.println(this.var); // prints 12
    }

    void noshadows(){
        System.out.println(var); // prints 12
    }
}

您的解决方法:

public void entry()
{
    customer_name=JOptionPane.showInputDialog(null, "Enter the customer name");
    String acc_num_str=JOptionPane.showInputDialog(null, "Enterthe account number");

    String open_balance_str=JOptionPane.showInputDialog(null, "Enter the balance");

    acc_num=Integer.parseInt(acc_num_str);

    open_balance=Double.parseDouble(open_balance_str);
}

【讨论】:

    【解决方案2】:

    我不是 Java 专家,所以这可能只是猜测,但这里的代码看起来不正确:

    public account()
    {
        customer_name="ADAM";
        acc_num=001;
        open_balance=100;
    }
    
    public void entry()
    {
        String customer_name=JOptionPane.showInputDialog(null, "Enter the customer name");
        String acc_num=JOptionPane.showInputDialog(null, "Enterthe account number");
    
        String open_balance=JOptionPane.showInputDialog(null, "Enter the balance");
    
        int acc_num1=Integer.parseInt(acc_num);
    
        double open_balance1=Double.parseDouble(open_balance);
    
    }
    

    entry() 方法中,您重新声明了customer_nameacc_numopen_balance 变量。因此,当您在该方法中引用它们时,您引用的是新创建的局部变量,而不是类级变量。

    我对它编译后感到惊讶,但我想这只是显示了我对 Java 的不了解。根本没有编译器警告吗?

    【讨论】:

    • Java 可以使用局部变量隐藏成员变量(也可以使用成员变量隐藏超类成员变量)。但是,大多数 IDE 会在您这样做时发出警告。
    猜你喜欢
    • 2012-03-30
    • 2013-04-08
    • 2022-12-16
    • 2012-05-13
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多