一、匿名对象
匿名对象:没有名字的对象
匿名对象的特征:
语法上: 只创建对象,但是不用变量来接收
匿名对象的使用:
1.匿名对象也是一个对象,具有对象的所有功能
2.每一次使用匿名对象时,都是一个新的对象, 每次创建匿名对象都是不同的对象,一个匿名对象,只能使用一次,即匿名对象只能调用一次
匿名对象只在堆内存中开辟空间,而不存在栈内存的引用
eg:
public class NiMingObject { public static void main(String[] args) { //1.非匿名对象(正常的对象) Dog d = new Dog(); d.setAge(10); d.setName("来福"); //d.eat(); System.out.println(d.getAge()+"..."+d.getName()); //2.匿名对象 new Dog(); //3.匿名对象的使用 new Dog().setAge(18); new Dog().setName("旺财"); System.out.println(new Dog().getAge()+"..."+new Dog().getName()); //new Dog().eat(); } }
二、匿名类(匿名内部类)
如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用
如我们需要一个监听类,并且在实例化这个监听类的时候才需要实现这个监听类内部的方法,那么使用匿名类就最方便了
public static void test01(){ //使用匿名内部类快速 创建 AbstractAnimal抽象类的子类对象 //第一种方式 new AbstractAnimal(){ @Override public void eat() { System.out.println("吃"); } @Override public void sleep() { System.out.println("睡"); } }; //第二种 new AbstractAnimal(){ public void eat() { System.out.println("....."); } @Override public void sleep() { System.out.println("!!!"); } }.sleep(); //第三种 AbstractAnimal an1 = new AbstractAnimal(){ @Override public void eat() { System.out.println("吃吃吃"); } @Override public void sleep() { System.out.println("睡睡睡"); } }; an1.eat(); an1.sleep(); } }