1.匿名对象
1.定义
没有对象名的对象
2.特点
匿名对象只能使用一次,只在堆内存中开辟空间,而不存在栈内存的引用。
因为匿名对象的创建格式为:new 类名,每次通过new 类的格式调用属性或方法时,其实就 是先创 建对象匿名,再调用属性和方法
package sjz;
class Student{
String name;
void read() {
System.out.println("好好读书");
}
}
public class app01 {
public static void main(String[] args) {
Student student=new Student();
student.name="yu";
System.out.println(student);//创建一个匿名对象
System.out.println(new Student());//创建一个匿名对象
System.out.println(new Student());//创建一个匿名对象
}
}
运行结果
sjz.Student@1c4af82c
sjz.Student@379619aa
sjz.Student@cac736f
sjz.Student@5e265ba4
运行结果表明每次执行System.out.println(new Student());语句都会创建一个新的匿名对象,所以匿名对象只能使用一次
2.匿名内部类
1.定义
没有类名的类
2.特点
只能使用一次
原因如下
package sjz;
abstract class Animal{
public abstract void shout();
}
public class app01 {
public static void main(String[] args) {
//通过匿名内部类创建a1
Animal a1=new Animal(){
@Override
public void shout() {
// TODO Auto-generated method stub
System.out.println("miao");
}
};
//通过匿名内部类创建a2
Animal a2=new Animal(){
@Override
public void shout() {
// TODO Auto-generated method stub
System.out.println("miao");
};
//尽管a1和a2的匿名内部类的内容相同,但是实际上这两个匿名内部类不是同一个类,所以匿名内部类(该类创建对象)
//只能使用一次
};
a1.shout();
a2.shout();
}
}
3.匿名内部类和匿名对象的关系
匿名内部类有可以创建普通对象(类名 对象名=new 类名(){ ..........})和匿名对象(new 类名(){ ..........}).其中匿名对象只能使用一次。匿名内部类也只能使用一次