2

我已经问过我的老师一千次了,他向我解释了很多次,但我仍然不知道什么时候在变量/方法中使用静态

有人可以对此给出一个隐喻的解释,也许还可以展示一些需要静态和不需要静态的示例?

4

4 回答 4

1

我想在没有类实例的情况下访问该方法吗?

如果您回答是,您可能需要一个静态方法。

私有静态变量可用于在该类的实例之间共享数据,即,如果您有:

public class Car
{
    private static int wheelsNum;
    private String company;
    private String color;
    ...
    ...
}

那么如果你改成wheelNum2,那么所有的车都会有2个轮子。

例如,考虑这段代码:

Car car1 = new Car();
Car car2 = new Car();

car1.setColor("Yellow");
car2.setColor("Blue");

car1.setWheelsNum(4);
car2.setWheelsNum(2);

然后两辆车都将有 2 个轮子,尽管我“不是”要更改第一辆车的轮数。但是,正如你所知道的,这些汽车有不同的颜色。

public static变量在没有创建类实例的情况下使用,而private static变量则不是。

当您需要在静态函数中使用变量时,您只能使用静态变量,因此将其设为私有以不从其他类访问它们。

静态方法不能访问非静态方法(变量也是如此)。

于 2013-04-05T07:22:24.557 回答
1

我会尽量简明扼要地解释一下,我也是学生。静态变量或方法,不会随每个实例而改变。例如,我们有这个测试类:

        Class Test(){
         String name;
         static int money;
         public test(String name, int money){
           this.name = name;
           this.money = money;
         }
    //Changes money value
         public void setMoney(int money){
          this.money = money;
    }
   public int getMoney(){
    return this.money 
}
        }

现在我们将创建 2 个 test() 测试实例: T​​est test1 = new test("test1", 10); 这里test1的实例名称为“test1”,货币值为10。 test test2 = new test("test2", 20); 现在,test1 的实例名称仍然是“test1”,但货币价值现在是 20!当您需要例如计算已创建的实例数量或一般计数时,这可能很有用。它真的很强大,使用静态变量你可以简单地改变每个实例的属性。如果我现在执行 test1.setMoney(1000),test1.getMoney 将返回 1000,而 test2.getMoney 也将返回 1000,我希望我能帮上忙……

于 2013-04-05T07:26:13.183 回答
0

您要求示例,这是一个简单的示例:

该类Integer有一个intValue()方法。它只对这个类的一个实例有意义,所以这个方法不能是静态的。

这个类还有一个valueOf()方法,它从指定的int. 您不需要现有的实例来调用此方法,因此此方法是静态的。

于 2013-04-05T07:33:40.173 回答
0

我终于明白了,感谢Maroun Maroun!

对于阅读这个问题的其他人,我想出了一个清晰的方法来解释这个问题(如果我错了,请纠正我!)

假设我们有一个名为 Person 的类。

此类的每个实例都会使用定义他的变量创建一个新人,因此变量“age”和“name”被分配给这个人,因此是非静态的,

此类的每个实例也将总人数加 1,因此此变量值在所有人之间共享,此变量必须是静态的。

public class Person {


    private static int amountOfPersons;
    private String name;
    private int age;

    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        person1.age = 10;
        person2.age = 20;
        person1.name="Johnny";
        person2.name="Brian";
        System.out.println(person1.amountOfPersons+" "+person1.name+" "+person1.age);
        System.out.println(person2.amountOfPersons+" "+person2.name+" "+person2.age);
    }
    public Person(){
        Person.amountOfPersons++;
    }
} 
于 2013-04-05T08:08:57.337 回答