java - 静态方法和字段是否在定义它们的类的实例中占用内存?

标签 java static static-methods

例如,如果我要创建以下类:

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/

相关文章:

java - 多次注册的条件验证

c# - 我应该如何清除通用静态类中的字段?

java - 扩展 Java 类还是提供静态帮助类?

java - Java中静态方法中调用非静态方法

java - Java-Struts Web 应用程序中的重构方法会导致争用吗?

java - 在用 spring 的 @Transactional 注释的方法中抛出并捕获未经检查的异常是否仍会导致事务回滚?

java - 如果 JUnit 测试当前在套件中运行,如何让它们知道

java - 如何检查可编辑组合框中的选定项目是否为空

C++:使方法每次都返回相同的对象

python - 使用类名调用静态方法 - 好还是坏?