Skip to content

匿名对象

按照之前的内存关系来讲,对象的名字可以解释为在 栈内存 中保存,而对象的具体内容(属性)在 堆内存 中保存,这样一来,没有栈内存指向堆内存空间,就是一个 匿名对象 ,如图所示。

image-20240922204745487
java
class Book { 									// 定义一个新的类
    private String title; 							// 书的名字
    private double price; 							// 书的价格
    public Book(String t,double p) {					// 有两个参数的构造
        title = t ;								// 直接为属性赋值
        price = p ;								// 直接为属性赋值
    }
    // setter、getter略
    public void getInfo() { 							// 此方法将由对象调用
        System.out.println("图书名称:" + title + ",价格:" + price);
    }
} 
public class TestDemo {
    public static void main(String args[]) {
        new Book("Java开发", 69.8).getInfo();			// 匿名对象
    }
}
class Book { 									// 定义一个新的类
    private String title; 							// 书的名字
    private double price; 							// 书的价格
    public Book(String t,double p) {					// 有两个参数的构造
        title = t ;								// 直接为属性赋值
        price = p ;								// 直接为属性赋值
    }
    // setter、getter略
    public void getInfo() { 							// 此方法将由对象调用
        System.out.println("图书名称:" + title + ",价格:" + price);
    }
} 
public class TestDemo {
    public static void main(String args[]) {
        new Book("Java开发", 69.8).getInfo();			// 匿名对象
    }
}

本程序通过匿名对象调用了类中的方法,但由于匿名对象没有对应的栈内存指向,所以只能使用一次,一次之后就将成为垃圾,并且等待被 GC 回收释放。

什么时候使用匿名对象?

是否使用匿名对象要看用户需求。

有些读者可能并不习惯于这种匿名对象的使用,并且会觉得通过匿名对象调用方法的操作有些难以理解,所以并没有强制性地向读者推荐一定要使用匿名对象,不习惯的读者可以继续像之前那样声明并实例化对象进行操作,但是对于匿名对象的定义读者必须清楚, 开辟了堆内存空间的实例化对象,只能使用一次,使用一次之后就将被 GC 回收

用心去做高质量的编程学习内容网站,欢迎star ⭐让更多人发现!