经过前面的学习,我们知道创建对象的标准格式如下:

类名称 对象名 = new 类名称();

每次 new 都相当于开辟了一个新的对象,并开辟了一个新的物理内存空间。如果一个对象只需要使用唯一的一次,就可以使用匿名对象,匿名对象还可以作为实际参数传递。

匿名对象就是没有明确的给出名字的对象,是对象的一种简写形式。一般匿名对象只使用一次,而且匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。

public class Person 
{
    public String name; // 姓名
    public int age; // 年龄

    // 定义构造方法,为属性初始化
    public Person(String name, int age) 
    {
        this.name = name;
        this.age = age;
    }

    // 获取信息的方法
    public void tell() 
    {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }

    public static void main(String[] args) 
    {
        new Person("张三", 30).tell(); // 匿名对象
    }
}

程序运行结果为:

姓名:张三,年龄:30

在以上程序的主方法中可以发现,直接使用了“new Person("张三",30)”语句,这实际上就是一个匿名对象,与之前声明的对象不同,此处没有任何栈内存引用它,所以此对象使用一次之后就等待被 GC(垃圾收集机制)回收。

匿名对象在实际开发中基本都是作为其他类实例化对象的参数传递的,在后面的 Java 应用部分的很多地方都可以发现其用法,而且细心的读者可以发现,匿名对象实际上就是个堆内存空间,对象不管是匿名的还是非匿名的,都必须在开辟堆空间之后才可以使用。