如果我从大小变化派生的 java 对象,我是否需要重建?

Do I need to rebuild if a java object I derive from changes in size?

我尝试寻找答案但没有成功。如果我从中派生的 class 包含在 jar 中的大小发生变化,我是否需要重建我的代码?顺便说一下,我是 java.

的新手

我很确定在 C++ 中答案是肯定的。我认为 C++ 中的 'new' 包含一个 malloc() ,然后是对构造函数的调用。如果 class 的大小是从我正在链接的二进制文件中的更改派生的,我将需要重新编译我的源代码,以便编译器知道我从中派生的 class 的新大小否则不会分配足够的内存。

[用例子编辑]

请耐心等待,因为我对 java 不是很熟悉。忽略任何语法错误。希望我能让这个例子足够接近以表达我的观点。

public class MyClass extends 3rdPartyClass
{
...
}

public class OneOfMyClasses
{
   public void Foo()
   {
      MyClass mc = new MyClass();  <-- allocation needs to happen here
   }
}

在 3rdParty jar 文件中:

public class 3rdPartyClass
{
   private int int1;
   private int int2;

...
}

现在在 3rdPartyClass 中进行了更改。他们添加了更多实例成员:

public class 3rdPartyClass
{
   private int int1;
   private int int2;
   private int int3;
...
}

还有一个 int,因此当分配给 MyClass 时,它需要从 x 字节更改为 x + sizeof(int) 字节。分配(malloc?)是否发生在我的代码中?在 C++ 中,malloc 发生在我的代码中,然后调用构造函数。因此,我的代码必须重新编译,即使我没有更改任何内容,以便可以分配正确的字节数。只是想知道它在 java.

中是如何工作的

谢谢, 尼克

如果我没理解错的话,不是。如果您正在使用的 jar/lib 更改了 implementation/code,则您不必重建自己的 类,它是从它们扩展而来的。

如果库更改 public 个成员,您必须重新编译。

虽然有一些陷阱,我记错了。但总的来说,我会建议总是重新编译你的代码。

Java 程序始终使用标准 Java API 类 和普通 jar 中的普通 类 接口。如果您分发使用某个供应商的实施编译的软件 jar,您可以让 运行 与其他供应商的实施相对照。这是 Java 的一个非常重要的方面,如果通过扩展 类 使用一个实现的内存使用细节,它就不会起作用。字节码编译完全没有这些东西。