我想询问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
会产生很大的不同并使我的代码出错。
答案 0 :(得分:4)
静态变量属于类而不是类的单个实例。因此,更新该静态成员的类的所有实例都在更新相同的变量并相互覆盖。
答案 1 :(得分:2)
静态变量是所有对象共有的变量。意味着每个实例将共享相同的变量。有关更多信息,请参阅Understand Class Member
答案 2 :(得分:1)
我认为你还没有读过关于类的静态实例。刚刚读到关于静态的静态和简短的想法 首先阅读静态关键字。 static keyword
静态变量将单个副本抛出系统。并且只存在该实例的一个副本。
以后你可以修改它但不能分配新的它将覆盖相同的变量。
答案 3 :(得分:1)
静态变量属于类而不是您正在创建的对象。因此,通过创建变量static,所有创建的对象都没有该特定变量。他们可以访问属于该类的静态变量。
因此,只要他们更新变量,因为它是静态的,他们正在更新类中的变量。
通过从变量声明中删除static
,将其从类中删除并使其成为每个对象的一部分。因此,如果删除static
部分,则您创建的每个对象都将拥有自己的变量。
答案 4 :(得分:0)
Static
变量是类变量并且具有单个实例。在您的情况下,他们将更新的值作为覆盖它们。
要使用为构造函数传递的值获取结果,需要使用不同的对象实例化类,因此从变量中删除static关键字