在Java中,我们能够保存数据的内存是由栈和堆来提供的。栈是一种线性结构,它采用“先进后出”的原则,每个线程都有它自己的栈。而堆则是一种树形结构,它不同于栈的局部性,允许保留并使用更多的数据。所有的对象都在堆中进行分配。
public class Example {private int num;private String str;public Example(int num, String str) {this.num = num;this.str = str;}public int getNum() {return num;}public String getStr() {return str;}}
在上面的代码中,我们定义了一个Example类,它有两个属性num和str。在Java中,我们通常使用new关键字来创建一个对象,并将它保存在堆中:
Example example = new Example(10, "Hello World!");
在这行代码中,我们创建了一个Example对象,并将它保存在堆中。同时,栈中的example变量也保存了一个指向堆中Example对象的引用。
当我们调用例子的getNum()方法时,返回的是堆中Example对象的属性num值,这个值将会被保存在栈中的函数调用栈帧中:
System.out.println(example.getNum());
因此,栈和堆在Java中提供了一个非常有用的计算机内存存储区域,用于保存不同类型的数据和对象。