java - 静态方法和字段是否在定义它们的类的实例中占用内存?
问题描述
例如,如果我要创建以下类:
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
你的问题一样——为你的整个程序分配一次。其他“正常”类成员 - 就像field2
您的问题一样 - 为您创建的每个新实例分配。
当您创建一个对象的新实例时,其各种方法的代码不会“分配”,因为它已经以编译形式存在于您的程序中。
推荐阅读
- vim - 在verilog中按数字顺序对case语句进行排序
- html - 如何在 django 中将文件打印到 html 页面
- reactjs - Axios 不向 rootSaga 返回数据
- java - Spring Integration - MessageTransformationException - MismatchedInputException:无法反序列化字符串实例
- c++ - 如何在 C++ 中有效地从 .txt 加载数据?
- django - 在 nginx+uwsgi 中运行时,django url 模式会去除正斜杠
- captiva - Captiva Designer ODBC - 即使返回多行,流也不会出错
- tensorflow - 在 Tensorflow 2.0 中归档 tensorflow 张量的最佳方式?
- python - 在 Django 视图中散列
- mysql - 在 SQL 数据库中存储一个范围/多个范围(上限可能未知)