关于对象

时间:2017-12-08 16:46:20

标签: java object initialization

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

    }

}

附上我的代码。我正在尝试创建一个AccountManager对象并调用它 开始方法。

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

我对此非常困惑;我想

this.accountmanager=accountmanager;
  1. 是accountmanager对象的初始化吗?我的(有限的)理解是初始化涉及=。
  2. ,例如

    a=10;
    

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

    1. 我之前收到了一条错误,确认无法从静态上下文中引用非静态变量事务。
    2. 要解决这个问题,我包括:

       Transaction t=new Transaction();
      

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

      错误讯息:

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

      “变量accountmanager可能尚未初始化”

1 个答案:

答案 0 :(得分:23)

这是问题所在:

$transpose = array_map(null, ...$result);

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

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

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

您期望int y = 10; int x = y + x; 的价值结束的是什么?您已经说过它的初始值应该是x的值加上它的当前值...但它不会 当前值价值,因为你正试图找到它的初始值!

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

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

    accountmanager

    (请注意AccountManager accountManager= new AccountManager(account, t); 中的大写字母M,以遵循Java命名惯例。为了清楚起见,我可能会将accountManager重命名为t。)