Confusion as to initialization (or lack thereof) of object

package lab9;

import java.util.Scanner;
import java.util.Date;

 * Write a description of class AccountManager here.
 * @author (your name) 
 * @version (a version number or a date)
public class AccountManager
    // the account
    private Account account;
    // reader for reading user input
    private Scanner reader;
    private Transaction transaction;
    private AccountManager accountmanager;

     * Constructor for objects of class AccountManager
    public AccountManager(Account account, Transaction transaction, AccountManager accountmanager)
        this.account = account;
        reader = new Scanner(;
        this.transaction =transaction;


    public void start()
        boolean finished = false;

        for(int i=0; i<3; i++)
            // get amount
            System.out.print("Transaction amount to add?\n>");
            String inputAmount = reader.nextLine();
            double amount = Double.parseDouble(inputAmount);

            // get type
            System.out.print("Transaction type?\n>");
            String type = reader.nextLine();

            // TO DO: get reference
            System.out.print ("Transaction reference?\n>");

            // date is today's date
            Date date = new Date();

            // TO DO: create transaction and add to account

            System.out.println("Transaction added");

            // TO DO: display balance

    public static void main(String[] args)

        Transaction t=new Transaction();

        Customer cust = new Customer("Fernando", "Alonso");
        Account account = new Account(cust, "12345");
        AccountManager accountmanager= new AccountManager (account,t, accountmanager);

        // TO DO: create AccountManager object and call start method



Enclosed is my code. I am trying to create an AccountManager object and call its start method.

However, I am getting an error identifying that the Accountmanager object may not have been intialized.

I am confused by this greatly; I thought

  1. Was the initialization of the accountmanager object? My (limited) understanding is that the initialization involves =.

such as


And if that were true, then that to me suggests that this.accountmanager=accountmanager would be valid? (Which I am assuming is incorrect, but just wanted to provide my thinking process).

  1. I had previously gotten an error returned to me, identifying that a non-static variable transaction cannot be referenced from a static context.

To remedy this I included:

 Transaction t=new Transaction();

So that in fell in the scope of the static method. Is that legal/correct?

Error message:

 AccountManager accountmanager= new AccountManager (account, t, accountmanager);

"variable accountmanager might not have been initialized"

Jon Skeet

This is the problem:

AccountManager accountmanager= new AccountManager (account, t, accountmanager);

You're declaring a variable, and trying to read from that variable in the same statement that gives it an initial value.

Here's a simpler example, to show how it's nonsensical:

int y = 10;
int x = y + x;

What would you expect the value of x to be at the end of that? You've said its initial value should be the value of y plus its current value... but it doesn't have a current value, because you're trying to find its initial value!

I strongly suspect that you shouldn't have that their constructor parameter at all though. Why does one AccountManager need a reference to another? You should:

  • Remove the accountmanager field
  • Remove the accountmanager constructor parameter
  • Change the local variable declaration and initialization to:

    AccountManager accountManager= new AccountManager(account, t);

    (Note the capital M in accountManager, to follow Java naming conventions. I'd probably rename t to transaction for clarity too.)


See more on this question at Stackoverflow