一、匿名對象
匿名對象:沒有名字的對象
匿名對象的特征:
語法上: 只創建對象,但是不用變量來接收
匿名對象的使用:
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(); } }