如果我错了,请纠正我。 我被教过,
现在还有一个问题,是否为每个对象存储了所有这些内容,或者只创建了一个对象以了解信息
另外请告诉我这个Field类实际上有什么?比如像
class b
{
String s="sdnla";
}
并且有两个b类,b1和b2对象,Field类对象有什么?
答案 0 :(得分:2)
在正常情况下,每个类只有一个Class对象。不是每个对象。如果Java为每个对象创建了所有结构,那么它将使用大量内存;远远超过实际需要。
如果要在应用程序中创建多个类加载器,那么每个类最终可能会有多个Class对象 - 每个类加载器都有一个Class对象。但是我们中很少有人做过这样的事情。如果您正在编写应用程序服务器或类似的东西,则可以执行此操作。
答案 1 :(得分:0)
为每个对象初始化类中的变量 为它分配单独的空间 但是对于构造函数和方法,只分配了一个公共空间 并且该类的所有对象都引用了这个
答案 2 :(得分:0)
如果我理解你的问题。请考虑那种情况下的字符串池。我认为无论你创建多少个对象,两个引用都可能指向字符串池中的相同引用。
字符串池是Java堆中的一个特殊存储区域,主要位于 PerGen空间,用于存储字符串文字,例如" abc"。当Java程序 使用String文字创建一个新的String,JVM检查该String 在池中,如果字符串文字已经存在于池中,则相同 返回object而不是创建一个全新的对象。字符串池 只有当你创建String作为文字时,才会执行检查 使用new()运算符创建String,新的String对象将是 即使具有相同内容的String在池中可用,也会创建。
答案 3 :(得分:0)
如果您熟悉较旧的块结构语言,则Object实例在概念上是一个结构加上指向该Object的实例的类的指针。 Class提供方法,静态字段以及在其所有实例之间共享的任何其他内容(直接或通过指向相关资源的指针)。 Object携带非静态字段。