Java 在其他实例的字段中实例化对象

Java 在其他实例的字段中实例化对象,java,Java,在下面的程序中,我在Book class成员字段中实例化了一个Store对象。这个命令是在堆中的每个Book类对象空间内分配内存,还是在堆的空闲区域分配一次内存并为其分配地址 public class Book{ private String bookName; private Store count = new Store(10); public Book(String bookName ) { this.bookName = bookName; } public voi

在下面的程序中,我在Book class成员字段中实例化了一个Store对象。这个命令是在堆中的每个Book类对象空间内分配内存,还是在堆的空闲区域分配一次内存并为其分配地址

public class Book{

private String bookName;
private Store count = new Store(10);



public Book(String bookName ) { 
    this.bookName = bookName;
}


public void display(){

    System.out.println(this.bookName);
}


public static void main(String[] args) {

    Book main = new Book("Machines");       
    main.display();
    System.out.println(main.count.bookCount);
}

}

由于Book类的每个实例都包含自己的Store类,因此这会为每个实例分配内存,而不是作为一个堆。如果希望对每个Book实例使用相同的Store实例,则必须像下面这样将Store实例传递到构造函数中的Book类中

public class Book{

private String bookName;
private Store count;



public Book(String bookName, Store count) { 
    this.bookName = bookName;
    this.count = count;
}

由于Book类的每个实例都包含自己的Store类,因此这将为每个实例分配内存,而不是作为一个堆。如果希望对每个Book实例使用相同的Store实例,则必须像下面这样将Store实例传递到构造函数中的Book类中

public class Book{

private String bookName;
private Store count;



public Book(String bookName, Store count) { 
    this.bookName = bookName;
    this.count = count;
}

Store
是一种引用类型。实例化引用类型时,将分配一部分未使用的堆来存储实际实例。然后,将有一个“参考”存储在您当前所在的任何位置。此引用“指向”实际对象的存储位置

所以,


实际的
存储
对象存储在其他地方,而不是
书籍
实例中。在book实例中,一个值被更改为存储
存储
对象的内存地址。

存储
是一种引用类型。实例化引用类型时,将分配一部分未使用的堆来存储实际实例。然后,将有一个“参考”存储在您当前所在的任何位置。此引用“指向”实际对象的存储位置

所以,


实际的
存储
对象存储在其他地方,而不是
书籍
实例中。在book实例中,将一个值更改为存储
存储
对象的内存地址。

对象没有可分配的内存。更正了每本书的新
存储
对象的语句。可以,但是,是在实例空间中还是在堆外部分配空间。对象,包括实例字段:堆。对象没有要分配的内存。更正了每本书的“新建<代码>存储对象”一句。确定,但是,是在实例空间中还是在堆外部分配了空间。对象,包括实例字段:堆。