如何访问非静态变量&来自不同类的方法

时间:2014-11-12 17:21:08

标签: java static

我不太了解正确使用“静态”。

我有一个包含我想从不同类访问的变量的类。

然而,当我尝试从不同的类访问此getter方法时,我收到错误说明

“非静态方法getAccNumber()不能从静态上下文中引用。”

那么如何在不使其变为静态的情况下找到此变量值。这个问题是,如果我使它静态,该对象的每个实例都会覆盖前一个值。 因此,在这种情况下,他们最终都会使用相同的帐号。

让我详细解释......

我有一个名为Account的类,它包含一个名为accountNumber的变量。以及这个名为getAccNumber()的getter方法。 我有一个名为AccountList的第二个类,它是一个单独的arraylist类来存储Account的实例。我想创建一个基于它的accountNumber删除元素的方法。所以我在AccountList类中搜索并使用getAccnumber()来与用户参数进行比较并删除是否正确! 但我不能使用这种方法,而不是让它静止! 任何帮助/解释将不胜感激:)

我想做..

public boolean removeAccount(String AccountNumber)

{   


    for(int index = 0; index < accounts.size(); index++)

    {

    if (AccountNumber.equals(Account.getAccNumber()))
   {

        accounts.remove(index);
        return true;
    }
}
    return false;
}

三江源!

3 个答案:

答案 0 :(得分:1)

让我们举个例子

public class A {
  static void sayHi() { System.out.println("Hi"); 
  //Other stuff
}

public class B {
  void sayHi() { System.out.println("Hi"); 
  //Other stuff
}

然后

public class C {
  public C() {
    A.sayHi(); //Possible since function is static : no instantiation is needed. 
    B.sayHi(); //Impossible : you need to instantiate B class first
  }

答案 1 :(得分:0)

静态变量是与类本身一起存在的变量。非静态变量对于该类的每个实例都是唯一的(即,从该类构建的每个对象。)可以作为类的属性访问的静态变量,如:

SomeclassIMadeUp.numberOfFish;

因此,如果您更改该类的numberOfFish属性,无论您在何处引用它,都会看到更改(正如您已注意到的那样)。

要让每个实例都有一个唯一的,不要将变量声明为静态,然后添加一个getter和/或setter方法来访问它。

private int numberOfFish;

public int getNumberOfFish(){return(numberOfFish); }

那么你的问题......

Ocean pacific = new Ocean();
pacific.water = Ocean.salty;  // <-- Copying the value from a static variable in the class Ocean
                              // to the instance variable in the object pacific (which is of Ocean class).
pacific.setNumberOfFish(1000000000);

Octopus o = new Octopus();
o.diningOpportunities = pacific.getNumberOfFish();  // <-- Calls the public method to return a
                              // value from the instance variable in the object pacific.

答案 2 :(得分:0)

您可以查看此链接以获得简短定义:

Static Method Definition

如果将变量声明为static,则对于每个类的实例它都不是唯一的。如果将变量声明为private,则可以创建getter和setter方法,以便在创建类的实例后访问该变量。例如,如果您有classA和classB,并且您在classB中工作并且希望私有int大小为classA:

classA a = new ClassA();

int size = a.getSize(); // getSize()返回classA的私有int大小