例如,如果我要创建以下类:
public Class ExampleClass {
private static String field1;
private String field2;
public ExampleClass(String field2) {
this.field2 = field2;
}
public static staticMethodExample(String field1) {
this.field1 = field1;
}
}
如果我要创建一个 ExampleClass
的实例.该实例是否包含我创建的静态方法和/或字段的代码?我有一个对象将代表我数据库中一行的一些数据。我想从数据库中的每一行创建这些对象的列表。数据库有数千行。我正在创建的静态方法将在将数据库中的值放入对象构造函数之前对其进行格式化。
我不想通过将方法存储在对象的每个实例中来膨胀代码。因此,如果静态方法确实占用了对象的每个实例中的空间,那么我宁愿创建一个名为
ExampleClassBuilder
的单独类。 .并将格式化静态方法放在那里。
最佳答案
不,静态方法和字段在类的实例中不占用空间。
你在这里制造了一些困惑。当你编译你的程序时,你的每个方法的代码(静态或非静态)都“存储”在你编译的程序中(在 Java 的情况下,在 .class
文件中)。执行程序时,静态成员 - “属于”一个类,如 field1
在您的问题中 - 为您的整个程序分配一次。其他“正常”类(class)成员 - 如 field2
在您的问题中 - 为您创建的每个新实例分配。
当你创建一个对象的新实例时,它的各种方法的代码没有“分配”,因为它已经以编译形式存在于你的程序中。
关于java - 静态方法和字段是否在定义它们的类的实例中占用内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64611524/