我已经问过我的老师一千次了,他多次向我解释过,但我仍然没有在变量/方法中使用静态
有人可能会为此提供一个隐喻性的解释,也许还会显示一些需要静态的例子,哪些不是?
答案 0 :(得分:1)
我是否想要在没有该类实例的情况下访问该方法?
如果你回答是,你可能想要一个静态方法。
私有静态变量可用于跨该类的实例共享数据,即如果您有:
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);
然后两个汽车将有两个轮子,虽然我“没有”意味着改变第一辆车的车轮号。但是,正如你所知,汽车有不同的颜色。
public static
变量使用而不是制作类的实例,而private static
变量则不是。
当您需要在静态函数中使用变量时,您只能使用静态变量,因此将其设置为私有,以便不从其他类访问它们。
静态方法无法访问非静态方法(对于变量也是如此)。
答案 1 :(得分: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()测试实例: 测试test1 =新测试(“test1”,10); 这里,test1实例的名称是“test1”,货币值是10。 测试2 =新测试(“test2”,20); 现在,test1实例的名称仍为“test1”,但现在的钱值为20! 当您需要计算已创建的实例数或一般计数时,这非常有用。它非常强大,使用静态变量,您只需更改avery实例的属性即可。 如果我现在执行test1.setMoney(1000),test1.getMoney将返回1000并且test2.getMoney也将返回1000 我希望我能帮忙......
答案 2 :(得分:0)
你问了一些例子,这里有一个简单的例子:
Integer
类有intValue()
方法。它只对这个类的实例有意义,所以这个方法不能是静态的。
此类还有一个valueOf()
方法,它从指定的int
返回该类的实例。您不需要有现有实例来调用此方法,因此此方法是静态的。
答案 3 :(得分: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++;
}
}