对于对象的初始化(或缺乏)的困惑

Iro*_*lan -8 java initialization object

package lab9;

import java.util.Scanner;
import java.util.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(System.in);
        this.transaction =transaction;
        this.accountmanager=accountmanager;




    }

    public void start()
    {
        System.out.println("WELCOME TO THE ACCOUNT MANAGER APPLICATION");
        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");
            account.displayTransactions();

            // 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

    }

}
Run Code Online (Sandbox Code Playgroud)

附上我的代码.我正在尝试创建一个AccountManager对象并调用其start方法.

但是,我收到一个错误,指出Accountmanager对象可能尚未初始化.

我很困惑这个; 我想

this.accountmanager=accountmanager;
Run Code Online (Sandbox Code Playgroud)
  1. 是accountmanager对象的初始化吗?我的(有限的)理解是初始化涉及=.

a=10;
Run Code Online (Sandbox Code Playgroud)

如果这是真的,那么对我来说这表明this.accountmanager = accountmanager是有效的吗?(我假设这是不正确的,但只是想提供我的思考过程).

  1. 我之前收到了一个错误,确认无法从静态上下文引用非静态变量事务.

为了解决这个问题,我包括:

 Transaction t=new Transaction();
Run Code Online (Sandbox Code Playgroud)

这样就落在了静态方法的范围内.这合法/正确吗?

错误信息:

 AccountManager accountmanager= new AccountManager (account, t, accountmanager);
Run Code Online (Sandbox Code Playgroud)

"变量accountmanager可能尚未初始化"

Jon*_*eet 23

这就是问题:

AccountManager accountmanager= new AccountManager (account, t, accountmanager);
Run Code Online (Sandbox Code Playgroud)

您正在声明一个变量,并尝试从同一语句中读取该变量,从而为其提供初始值.

这是一个更简单的例子,展示它是如何荒谬的:

int y = 10;
int x = y + x;
Run Code Online (Sandbox Code Playgroud)

你期望什么价值x在那结束?你曾说过其初始值应的值y加上当前值...但它不具有的电流值,因为你想找到它的初始值!

我强烈怀疑你根本不应该有他们的构造函数参数.为什么AccountManager需要引用另一个?你应该:

  • 删除该accountmanager字段
  • 删除accountmanager构造函数参数
  • 将局部变量声明和初始化更改为:

    AccountManager accountManager= new AccountManager(account, t);
    
    Run Code Online (Sandbox Code Playgroud)

    (注意M大写accountManager,遵循Java的命名规则.我可能会重命名ttransaction进行清晰了.)

  • @IronUhlan:那不是你发布的代码,因为你发布的代码没有`Scanner`构造函数参数.但不管怎样,这是一个不同的问题,你应该调查并尝试自己解决,问一个新的问题,如果*绝对*必要.Stack Overflow不是交互式调试服务. (19认同)