首页 > 解决方案 > 静态方法和字段是否在定义它们的类的实例中占用内存?

问题描述

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

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. 并将格式化静态方法放在那里。

标签: javastaticstatic-methods

解决方案


不,静态方法和字段不会在类的实例中占用空间。

你在这里制造了一些混乱。当你编译你的程序时,你的每个方法的代码(静态的或非静态的)都“存储”在你编译的程序中(在 Java 的情况下,在.class文件中)。当你执行一个程序时,静态成员——“属于”一个类,就像field1你的问题一样——为你的整个程序分配一次。其他“正常”类成员 - 就​​像field2您的问题一样 - 为您创建的每个新实例分配。

当您创建一个对象的新实例时,其各种方法的代码不会“分配”,因为它已经以编译形式存在于您的程序中。


推荐阅读