关于在java中使用静态变量或方法的隐喻或非常清楚的解释

时间:2013-04-05 07:08:24

标签: java variables methods static

我已经问过我的老师一千次了,他多次向我解释过,但我仍然没有在变量/方法中使用静态

有人可能会为此提供一个隐喻性的解释,也许还会显示一些需要静态的例子,哪些不是?

4 个答案:

答案 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++;
    }
}