Java 关于对象初始化(或缺少初始化)的混淆 accountmanager对象的初始化是否正确?我(有限的)理解是初始化涉及=

Java 关于对象初始化(或缺少初始化)的混淆 accountmanager对象的初始化是否正确?我(有限的)理解是初始化涉及=,java,object,initialization,Java,Object,Initialization,比如 this.accountmanager=accountmanager; 如果这是真的,那么对我来说,这表明这个.accountmanager=accountmanager是有效的?(我假设这是不正确的,但只是想提供我的思考过程) 我之前收到一个返回给我的错误,指出不能从静态上下文引用非静态变量事务 为了纠正这一点,我包括: a=10; 因此,在中属于静态方法的范围。这合法/正确吗 错误消息: Transaction t=new Transaction(); “变量accountma

比如

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

  • 我之前收到一个返回给我的错误,指出不能从静态上下文引用非静态变量事务
  • 为了纠正这一点,我包括:

    a=10;
    
    因此,在中属于静态方法的范围。这合法/正确吗

    错误消息:

     Transaction t=new Transaction();
    
    “变量accountmanager可能尚未初始化”

    这就是问题所在:

     AccountManager accountmanager= new AccountManager (account, t, accountmanager);
    
    您正在声明一个变量,并尝试从该变量中读取初始值所在的语句

    下面是一个简单的例子,说明这是多么荒谬:

    AccountManager accountmanager= new AccountManager (account, t, accountmanager);
    
    您希望
    x
    的值是多少?您说过它的初始值应该是
    y
    的值加上它的当前值。。。但它没有当前值,因为您正试图找到它的初始值

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

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

      int y = 10;
      int x = y + x;
      
      (注意
      accountManager
      中的大写字母M,以遵循Java命名约定。为了清楚起见,我可能也会将
      t
      重命名为
      transaction


    我已经回答了这个问题,但我强烈建议您编辑它以包含准确的错误消息,包括报告的位置。@Jon Skeet;我可以跟你澄清一下吗:交易t=新交易();因此,在中属于静态方法的范围。这合法/正确吗?这在
    main
    方法的范围内,是的。但这似乎与您的问题无关,因为您使用了
    accountmanager
    。每个帖子你应该问一个问题。
    t
    变量部分与问题的其余部分无关,您应该删除它。对不起,我认为这是导致错误的原因。错误消息没有提到
    t
    ,您以前收到的错误已经消失了,对吗?你读过我的答案了吗?它充分解释了这个问题。错误已经消失,被一个新的错误所取代:lab9类中的构造函数AccountManager。AccountManager不能应用于给定的类型;必需:lab9.Account,java.util.Scanner,lab9.Transaction found:lab9.Account,lab9.Transaction原因:实际参数列表和形式参数列表在length@IronUhlan:这不是您发布的代码,因为您发布的代码没有
    Scanner
    构造函数参数。但不管怎样,这都是一个不同的问题,你应该调查并尝试自己解决,如果绝对必要的话,问一个新问题。堆栈溢出不是交互式调试服务。
    int y = 10;
    int x = y + x;
    
    AccountManager accountManager= new AccountManager(account, t);