Java 在声明变量时使用static
我想问一下Java 在声明变量时使用static,java,static,Java,Static,我想问一下static:我创建了一个类music,并在声明我的music类变量时使用了static。但是当我运行我的主类来打印音乐数据时,它总是从我在主类中输入的最后一个数据中打印出相同的值 我的班级音乐: private static String name, genre; private static int price; public music(String a, String b, int c){ name = a; genre = b;
static
:我创建了一个类music
,并在声明我的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
会产生如此大的差异,并使我的代码出错。静态变量属于类,而不是类的单个实例。因此,更新该静态成员的类的所有实例都在更新同一个变量并相互重写。静态
变量都是类变量,只有一个实例。在您的情况下,它们将更新的值作为您的替代值
要使用传递给构造函数的值获得结果,需要使用不同的对象实例化该类,因此从变量中删除static关键字我想您还没有读过关于该类的静态实例的内容。只要读一读关于静态的短文就知道了 首先阅读静态关键字 静态变量将有一个副本从系统中抛出。并且该实例将只存在一个副本
稍后,您可以修改它,但不能指定新的,因为它将覆盖相同的变量 静态变量属于类而不是您正在创建的对象。因此,通过将变量设为静态,创建的所有对象都没有该特定变量。它们可以访问属于该类的静态变量 因此,由于变量是静态的,所以每当他们更新变量时,他们都在更新类中的变量
通过从变量声明中删除
static
,将其从类中删除,并使其成为每个对象的一部分。因此,如果删除静态
部分,您创建的每个对象都将有自己的变量。静态变量是所有对象通用的变量。这意味着每个实例将共享同一个变量。有关更多信息,请参阅您是否考虑过阅读有关类变量使用时的静态的含义?好的,如果您喜欢答案,您可以接受