在声明变量时使用static

时间:2014-11-18 10:58:10

标签: java static

我想询问static的影响:我在宣布音乐类变量时创建了一个课程music并使用了static。但是当我运行我的主类打印出音乐数据时,它总是打印出我在主类中输入的最后一个数据的相同值。

我的课堂音乐:

private static  String name, genre;
private static  int price;   

public music(String a, String b, int c){
        name = a;
        genre = b;
        price = c;
    }

我的主要课程代码:

music a1 = new music("A","A",1);
        music a2 = new music("B","B",2);
        music a3 = new music("C","C",3);
        music a4 = new music("D","D",4);

        System.out.println(a1);
        System.out.println(a2);
        System.out.println(a3);
        System.out.println(a4);

我的输出:

Music[Nama = D, Genre = D, harga = 4]
Music[Nama = D, Genre = D, harga = 4]
Music[Nama = D, Genre = D, harga = 4]
Music[Nama = D, Genre = D, harga = 4]

我知道如何修复它 - 我只需要从变量声明中删除static - 但我想知道为什么static会产生很大的不同并使我的代码出错。

5 个答案:

答案 0 :(得分:4)

静态变量属于类而不是类的单个实例。因此,更新该静态成员的类的所有实例都在更新相同的变量并相互覆盖。

答案 1 :(得分:2)

静态变量是所有对象共有的变量。意味着每个实例将共享相同的变量。有关更多信息,请参阅Understand Class Member

答案 2 :(得分:1)

我认为你还没有读过关于类的静态实例。刚刚读到关于静态的静态和简短的想法 首先阅读静态关键字。 static keyword

静态变量将单个副本抛出系统。并且只存在该实例的一个副本。

以后你可以修改它但不能分配新的它将覆盖相同的变量。

答案 3 :(得分:1)

静态变量属于类而不是您正在创建的对象。因此,通过创建变量static,所有创建的对象都没有该特定变量。他们可以访问属于该类的静态变量。

因此,只要他们更新变量,因为它是静态的,他们正在更新类中的变量。

通过从变量声明中删除static,将其从类中删除并使其成为每个对象的一部分。因此,如果删除static部分,则您创建的每个对象都将拥有自己的变量。

答案 4 :(得分:0)

Static变量是类变量并且具有单个实例。在您的情况下,他们将更新的值作为覆盖它们。

要使用为构造函数传递的值获取结果,需要使用不同的对象实例化类,因此从变量中删除static关键字