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() {@Overridepublic void eat() {System.out.println("吃东西(匿名子类对象创建)");}@Overridepublic void breath() {System.out.println("呼吸(匿名子类对象创建)");}};method1(p);System.out.println("********************");//创建匿名子类的匿名对象method1(new Person() {@Overridepublic void eat() {System.out.println("吃东西(匿名子类的匿名对象创建)");}@Overridepublic 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 {@Overridepublic void breath() {System.out.println("工人带面具呼吸");}@Overridepublic 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);}@Overridepublic void breath() {System.out.println("学生呼吸");}@Overridepublic void eat() {System.out.println("学生吃饭");}@Overridepublic String toString() {return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';}
}
Java中的匿名类和匿名对象相关推荐
- java中什么是类什么是对象
Java是一种面向对象的程序设计语言(Object Oriented Programming:OOP),面向对象的程序设计语言中有类和对象的概念,那么它们在概念上到底有什么区别呢? 下面以java语言 ...
- Java中使用Thread类
Java的特点之一就是内置对多线程的支持. 每个Java程序都有一个默认的主线程main.如果main方法中又创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CP ...
- Java中匿名子类 的 匿名对象、匿名子类 的 非匿名对象、非匿名类 的 匿名对象、非匿名类 的 非匿名对象
/*** @Author: YuShiwen* @Date: 2020/11/18 2:06 PM* @Version: 1.0*/ public class AnonymousTest {publi ...
- java匿名类和匿名对象及this的其他用法
/* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){子类内容:(覆盖父类的, 而 ...
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...
- Java中常用的类及其特点
Java中的内部类有四种(内部类作用1.封装装类型. 2.直接访问外部类成员. 3.回调.)内部类,方便他们的外部类调用,一般不会被其它类使用,比如事件监听器之类的,外部类刚好继承了一个别的类,如果你 ...
- JAVA基础(12.Java中的常用类String)
目录 1.前言 2.日期(时间)相关类 2.1 日期类的应用场景 2.1.1Java中的日期相关的几个类 3. Java中的常用类学习方式 3.1 什么是常用类?为什么要学习? 3.2 怎么使用Jav ...
- Java中的Unsafe类
1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...
- 在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象
在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象 我们知道,在 Java 中,创建一个内部类对象之前,需要它的一个外部类对象.这是因为内部类可能使用外部类的数据. 在内部类中 ...
- java 中常用的类
java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l static double abs(double a) 获取double 的绝对值 l sta ...
最新文章
- 线性代数:第二章 矩阵及其运算
- 如何向亲戚们解释人工智能可以干啥?
- DateUtils常用方法
- 了解如何使用Yii2 PHP框架创建YouTube克隆
- Angular进阶教程一
- python 2个dict如何合并
- python 控制雕刻机_GitHub - cdhigh/PrinterCnc: 废打印机改装的大行程“雕刻机”,可以制作PCB。...
- 关于黑莓8700刷ROM4.5后使用五笔输入法出现问号的处理
- matlab按图像边缘抠图_Ps最全十大抠图方法都在这,最后一种万能「值得收藏」...
- matlab dll 反编译,libmx.dll
- 局域网和内网?系统远程桌面和内网远程软件?
- python基础(中)
- 日记(2007年7月3日)
- tesseract-ocr在mac下的使用汇总
- cad线加粗怎么设置_CAD图纸线条粗细如何修改?CAD图纸线宽如何调整?
- PyTorch 在 Windows 10 系统下的环境配置及安装
- 给图片加水印的简单方法,手机图片加水印也可以用
- private vlan(私有vlan)
- 【转载】uvm前置 · Vim 从入门到精通
- linux命令:head、tail