Java中声明对象
当创建一个类时,是在创建一个新的数据类型。可以使用这个类型声明该类型的对象。然而,得到一个类的对象需要两个步骤。
首先,必须声明类类型的一个变量。这个变量没有定义对象,反而,它只是一个引用对象的变量。然后,需要获取对象实际的物理副本,并将其赋给那个变量。可以使用new运算符完成这一操作。new运算符动态地为对象分配内存,并返回指向对象的引用。这个引用基本上是由new为该对象分配的内存地址。然后将这个引用存储在变量中。因此在Java中,所有类对象都必须动态分配。
对象的使用
如果要访问对象里的某个成员变量或方法,可以通过:
访问属性: 对象名称.属性名
访问方法: 对象名称.方法名()
Java中的匿名对象
匿名对象就是指没有名字的对象
对于一个对象实例化的操作来讲,对象真正由用的部分是在堆内存里面,而栈内存只是保存了一个对象的引用名称(严格来讲是对象在堆内存的地址)。
所以,匿名对象就是指,只开辟了堆内存空间,而没有栈内存指向的对象。
匿名对象的特点:
1.匿名对象是没有被其他对象所引用,即没有栈内存指向
2.由于匿名对象没有栈内存指向,所以其只能使用一次,之后就编程无法找寻的垃圾对象,因此会被垃圾回收器收回。
栈内存和堆内存的区别
栈
在Java中,栈是由编译器自动分配和释放的一块内存区域,主要用于存放一些基本类型的变量(如int,float等)、指令代码、常量及对象的引用地址。
栈的优势在于,它存取速度比较快,仅次于寄存器,栈中的数据还可以共享。
缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
堆
堆是一个程序运行动态分配的内存区域。
在Java中,构建对象时所需要的内存从队中分配。这些对象通过new指令“显示”建立,放弃分配方式类似于数据结构中的链表。
堆内存在使用完毕后,时由垃圾回收器“隐式”回收的。
堆的优势是在于动态分配内存大小,可以“按需分配”,其生存期也不必事先告诉编译器,在使用完毕后,Java的垃圾收集器会自动收走这些不在使用的内存块。
缺点是,由于要在运行时才动态分配内存,相比于栈内存,它的存取速度较慢。