JVM是否总是创建Object类的实例

时间:2014-10-02 10:47:10

标签: java jvm classloader

假设使用以下代码,JVM总是创建Object类的实例,因为Object是Java中所有类的父级。

class MyTestclass{

   void printMe(String name){
        System.out.println('I am '+name);
   }
   public static void main(String args[]){
        MyTestclass obj = new MyTestclass();
        obj.printMe("stackOverFlow.com");
   }
}

另一堂课说TestClass2

class TestClass2{

   void printMe(String name){
        System.out.println('I am '+name);
   }
   public static void main(String args[]){
        MyTestclass obj = new MyTestclass();
        TestClass2 obj2 = new TestClass2();
        obj.printMe("stackOverFlow.com");
        obj2.printMe("stackOverFlow.com");
   }
}

如果我运行这两个类,JVM是否会创建两个对象实例?

3 个答案:

答案 0 :(得分:2)

没有。只创建了一个对象,并且所有内存都以Child的名称分配,即使对于从Parent继承的字段也是如此。

  

JVM总是创建Object类的实例,因为Object是Java中所有类的父级。

没有。但是,JVM会调用父构造函数,直到它到达调用为constructor chaining的最顶层的Object构造函数。

答案 1 :(得分:2)

嗯......这取决于你是什么意思,询问是否创建了Object的实例......

记住继承是如何工作的。假设您有四个类:ObjectAnimalDogTerrier。当您创建Terrier

的实例时
Terrier t = new Terrier();

只创建一个实例。您没有创建单独的 Object实例。但另一方面,继承点是Terrier 一个Dog 一个Animal,它 一个Object。因此,创建的这个实例不仅仅是 Object,而且 Object,就像其他所有实例一样。

所以你可以

Object t = new Terrier();

Animal t = new Terrier();

Dog t = new Terrier();

它本来是完全有效的Java。

所以答案是:Object的子类的单个实例被创建,因此是Object

答案 2 :(得分:1)

无论继承层次结构是什么,都只创建一个对象。父项的要素是继承的,并在与new运算符一起使用的类对象中提供。

  MyTestclass obj = new MyTestclass();

MyTestclass个实例中具有Objectobj类所有功能的一个对象。