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

时间:2015-09-01 16:52:53

标签: java size new-operator rebuild

我试着寻找答案但没有成功。如果我从中派生的类包含在jar中会改变大小,我是否需要重建代码?顺便说一下,我是java的新手。

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

[以示例编辑]

忍受我,因为我不熟悉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中是如何工作的。

谢谢, 尼克

1 个答案:

答案 0 :(得分:1)

如果我理解正确,不。如果你使用的jar / lib改变了实现/代码,你就不必重建你自己的类,这些类是从它们扩展而来的。

如果lib更改公共成员,则必须重新编译。

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

Java程序始终使用标准Java API类和接口,它们是普通jar中的普通类。如果您使用来自一个供应商的实现分发一个软件罐,您可以让它针对来自其他供应商的实现运行。这是Java的一个非常重要的方面,如果扩展类使用一个实现的内存使用细节,这将无法工作。字节码编译完全没有这些东西。