Java中的匿名类和匿名对象
-
匿名解释
匿名就是没有名字的对象,在创建对象时,只通过new的动作在开辟空间,却没有把堆内存空间的地址值赋值给栈内存的某个变量用以存储
匿名类/对象其实就是类/对象,对象具有的功能匿名类/对象都具有,只不过有名字的类/对象可以重复使用,匿名类/对象只能用一次罢了。
-
匿名类/对象特点
1、由于我们没有记录堆内存对象的地址值,所以只能用一次,再次使用就找不到了
2、匿名对象的好处就是使用完毕就是垃圾,可以在垃圾回收器空闲时回收,节省内存空间
-
代码演示
public class AnonymityTest { public static void main(String[] args) { method(new Student());//匿名对象 System.out.println("********************"); worker w = new worker(); method1(w); //非匿名的类非匿名的对象 method1(new worker()); //非匿名的类匿名对象 System.out.println("********************"); //创建匿名子类对象 Person p = new Person() { @Override public void eat() { System.out.println("吃东西(匿名子类对象创建)"); } @Override public void breath() { System.out.println("呼吸(匿名子类对象创建)"); } }; method1(p); System.out.println("********************"); //创建匿名子类的匿名对象 method1(new Person() { @Override public void eat() { System.out.println("吃东西(匿名子类的匿名对象创建)"); } @Override public void breath() { System.out.println("呼吸(匿名子类的匿名对象创建)"); } }); } public static void method(Student s){ s.eat(); } public static void method1(Person p){ p.eat(); p.breath(); } } class worker extends Person { @Override public void breath() { System.out.println("工人带面具呼吸"); } @Override public void eat() { System.out.println("工人吃法"); } } //执行结果: /* 学生吃饭 ******************** 工人吃法 工人带面具呼吸 工人吃法 工人带面具呼吸 ******************** 吃东西(匿名子类对象创建) 呼吸(匿名子类对象创建) ******************** 吃东西(匿名子类的匿名对象创建) 呼吸(匿名子类的匿名对象创建) */
上文代码用到的Person类和Student类的展示
class Person{ String name; int age; public Person() {} public Person(String name, int age) { this.name = name; this.age = age; } public void eat(){ System.out.println("人吃饭"); } public void breath(){ System.out.println("人呼吸"); } } class Student extends Person{ public Student() {} public Student(String name, int age) { super(name, age); } @Override public void breath() { System.out.println("学生呼吸"); } @Override public void eat() { System.out.println("学生吃饭"); } @Override public String toString() { return "Student{" + "name=" + name + + ", age=" + age + }; } }
下一篇:
java毕业设计_基于java的毕业设计