将对象声明为null的问题

时间:2013-07-06 23:00:20

标签: java object null

这是我的代码的一部分(之后有一个BankAccount类):

import java.util.Scanner; //This library is added

public class BankSystem_
{
    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);//Scanner object to read input

        BankAccount ba = null;


        //Define variables
        int task=0;
        int accountNumber=0;
        String accountName="unknown";
        double balance=0;
        double interestRate=.05;

        do
        {       
        System.out.println("1.\t Open new account");
        System.out.println("2.\t Current Balance");
        System.out.println("3.\t Deposit");
        System.out.println("4.\t Withdrawal");
        System.out.println("5.\t Change Interest Rate");
        System.out.println("6.\t Bank Statement");
        System.out.println("7.\t Exit");
        System.out.println("Please create an account and choose a task: ");
        task=keyboard.nextInt();
            switch (task)
            {
                case 1:
                    System.out.print("What is the account name?: ");
                    accountName=keyboard.nextLine();
                    System.out.print("\nWhat is the account number?: ");
                    accountNumber=keyboard.nextInt();
                    System.out.print("\nAmount of money to start your account?: ");
                    balance=keyboard.nextDouble();
                        while (balance < 100)
                        {
                            System.out.println("The minimum amount to open a new account should be $100");
                            System.out.print("Amount of money to start your account?: ");
                            balance=keyboard.nextDouble();
                        }   
                    BankAccount ba = new BankAccount(accountName,accountNumber,balance,interestRate);
                    System.out.print(ba.NewAccount());  
                    break;
                case 2:
                    if (ba != null)
                    {
                    System.out.print(ba.Balance());
                    }
                    break;
                case 3:
                    if (ba != null)
                    {
                    System.out.print(ba.Deposit());
                    }
                    break;
                case 4:
                    if (ba != null)
                    {
                    System.out.print(ba.Withdrawal());
                    }
                    break;
                case 5: 
                    if (ba != null)
                    {       
                    System.out.print(ba.ChangeInterestRate());
                    }
                    break;
                case 6:
                    if (ba != null)
                    {
                    System.out.print(ba.BankStatement());
                    }
                    break;
                case 7:
                    System.exit(0);
                    break;
            }
        }while(task >=1 && task <=7);
    }
}

*代码的目的是在选择任务1之前警告选择任务2-6的用户。因此,我必须检查BankAccount的对象是否为空以继续。

每当我包括:

BankAccount ba = null;

我稍后会在代码中加入:

BankAccount ba = new BankAccount(accountName,accountNumber,balance,interestRate);

声明对象,编译器告诉我variable ba is already defined in method main(String[])

但是当我删除null时,编译器会告诉我:

variable ba might not have been initialized                     if (ba != null)

我这里有什么不对吗?

3 个答案:

答案 0 :(得分:1)

只需更改

BankAccount ba = new BankAccount(accountName,accountNumber,balance,interestRate);

ba = new BankAccount(accountName,accountNumber,balance,interestRate);

因为您想要更改ba的内容,因为ba的变量已经在方法的开头定义了。因此,您无法再次声明具有相同名称的变量,您想要更改已存在的变量。

答案 1 :(得分:0)

BankAccount ba = new BankAccount(accountName,accountNumber,balance,interestRate);

尝试重新声明已声明的ba

只需将其更改为:

ba=new BankAccount(accountName,accountNumber,balance,interestRate);

另外,您应该将BankAccount ba = null;声明为BankAccount ba;。无论如何,ba在这种情况下将为空。

答案 2 :(得分:0)

而不是使用

  

BankAccount ba = new BankAccount(accountName,accountNumber,balance,interestRate);

使用:

  

ba = new BankAccount(accountName,accountNumber,balance,interestRate);`