我已经问过我的老师一千次了,他向我解释了很多次,但我仍然不知道什么时候在变量/方法中使用静态
有人可以对此给出一个隐喻的解释,也许还可以展示一些需要静态和不需要静态的示例?
我想在没有类实例的情况下访问该方法吗?
如果您回答是,您可能需要一个静态方法。
私有静态变量可用于在该类的实例之间共享数据,即,如果您有:
public class Car
{
private static int wheelsNum;
private String company;
private String color;
...
...
}
那么如果你改成wheelNum
2,那么所有的车都会有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
变量则不是。
当您需要在静态函数中使用变量时,您只能使用静态变量,因此将其设为私有以不从其他类访问它们。
静态方法不能访问非静态方法(变量也是如此)。
我会尽量简明扼要地解释一下,我也是学生。静态变量或方法,不会随每个实例而改变。例如,我们有这个测试类:
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() 测试实例: Test 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,我希望我能帮上忙……
您要求示例,这是一个简单的示例:
该类Integer
有一个intValue()
方法。它只对这个类的一个实例有意义,所以这个方法不能是静态的。
这个类还有一个valueOf()
方法,它从指定的int
. 您不需要现有的实例来调用此方法,因此此方法是静态的。
我终于明白了,感谢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++;
}
}