java 套娃_论“套娃”
轮“套娃”的实力,还是应该数得上那群“种花家”的“流氓兔”,钓上来“鹰酱”,实现三个愿望,“我要小钱钱和小钱钱、然后再来三个愿望”。典型的“耍流氓”,不过对于“鹰酱”这样的真正的流氓,耍一耍真倒也没什么。
那兔“流氓”套娃
这里探讨一下 Java 中的“套娃”
1、最基本的“套娃”:在一个类中的成员变量实例化该类
第一种情况:“套娃”导致java.lang.StackOverflowError
public class TaoWa {
private String name;
private String country;
private TaoWa taoWa = new TaoWa("流氓兔", "种花家");
public TaoWa() {}
public TaoWa(String name, String country) {
this.name = name;
this.country = country;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
public class Main {
public static void main(String[] args) {
TaoWa taoWa = new TaoWa("鹰酱", "美利坚");
}
}
在类TaoWa中我们new出了一个TaoWa,来自“种花家”的“流氓兔”,但是在Main真正执行的时候,我们是new了一个“美利坚鹰酱”的TaoWa对象。可能凭空想是想不明白,那么画图来告诉说明为什么“套娃”最后引发了StackOverflowError。
一个类中普通成员变量实例化该类对象“套娃”
从上面的图就能比较明显看出,在堆中会有不断有新的“流氓兔”出现,无限进行下去,最终导致 Stack Overflow 。
第二种情况:“套娃”有讲究
在上面的例子中,我们见识到了“套娃”的“疯狂”,但是,并不是说 Java 不允许我们“套娃”,因为“套娃”这种东西是有用的,尤其在一些考虑到安全的问题,比如实现“单例”等场景。
既然允许“套娃”,那么应该怎么处理?
用static关键字修饰那个实例化本类对象的成员变量。
public class TaoWa {
private String name;
private String country;
private static TaoWa taoWa = new TaoWa("流氓兔", "种花家");
public TaoWa() {}
public TaoWa(String name, String country) {
this.name = name;
this.country = country;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public static TaoWa getTaoWa() {
return taoWa;
}
@Override
public String toString() {
return "TaoWa{" +
"name='" + name + '\'' +
", country='" + country + '\'' +
'}';
}
}
public class Main {
public static void main(String[] args) {
TaoWa taoWa = new TaoWa("鹰酱", "美利坚");
System.out.println(taoWa.getTaoWa());
}
}
输出:
TaoWa{name='流氓兔', country='种花家'}
同样,用图的方法说一说为什么这样“套娃”是可以的。
一个类中成员变量实例化该类对象“套娃”
一旦把实例化本类对象的成员变量用static修饰,那么它属于类层级而不是属于对象层级,在这种情况下,虽然从代码上看起来我们进行了“套娃”,但是实际上在内存中,并没有同第一种情况那样“无限”的“流氓兔”出现,所以这样的情况下,是不会引发 Stack Overflow 的。
总结:
这里的“套娃”是指代码上所体现的一种形式,就是“一个类中的成员变量去实例化该类”,给人一层套一层的感觉,但是在内存中的体现,并不一定是给人“套娃”的感觉。
java 套娃_论“套娃”相关推荐
- 数学分析闭区间套定理_闭区间套定理的介绍及其应用
本次内容主要适合数学系院系的学生,非数学系的同学可以从略. 但因后续介绍函数连续性一些性质的证明时常需要用到,故笔者还是推荐非数专业的同学们了解一下,这将有助于同学们更加深刻的理解那些性质背后的意义. ...
- 数学分析闭区间套定理_闭区间套定理在数学教学中的一个有趣应用
龙源期刊网 http://www.qikan.com.cn 闭区间套定理在数学教学中的一个有趣应用 作者:宣渭峰 来源:<青年与社会> 2018 年第 30 期 摘 要:实数集的不可数性在 ...
- 真香,50行Java代码爬取妹子套图!
前言 当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留 ...
- java web学习项目20套源码完整版
java web学习项目20套源码完整版 自己收集的各行各业的都有,这一套源码吃遍所有作业项目! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servlet) 3.OA办公自动化 ...
- java习题8,java试题练习题(第8套
<java试题练习题(第8套>由会员分享,可在线阅读,更多相关<java试题练习题(第8套(9页珍藏版)>请在人人文库网上搜索. 1.班级: 姓名: 学号: 试题共 页 加白纸 ...
- 我来自台湾:普力600 消毒锭_普力-600 消毒片PL-600 SH-XT-K礼盒小套组_易迅发现_易迅网...
我来自台湾:普力600 消毒锭_普力-600 消毒片PL-600 SH-XT-K礼盒小套组_易迅发现_易迅网
- 被动套接字 主动套接字_了解网络套接字及其可能性
被动套接字 主动套接字 介绍 (Introduction) As users of web applications, we are accustomed to being able to quick ...
- 柯桥有了高级西服定制机构上万元的西服已订出10多套(图)_网易新闻中心
柯桥有了高级西服定制机构上万元的西服已订出10多套(图)_网易新闻中心 柯桥有了高级西服定制机构上万元的西服已订出10多套(图)_网易新闻中心 柯桥有了高级西服定制机构上万元的西服已订出10多套(图) ...
- 板材开料最优算法_板材套料软件AutoNest与Tekla Structures协同工作实现设计到加工自动化...
板材套料软件AutoNEST与Tekla Structures协同工作实现设计到加工自动化 摘要: 企业应该开始考虑 Tekla Structures 软件如何能应用到其他的部门以及其他的项目生产流程 ...
最新文章
- NoSQL介绍(三)
- 计算机二级2021辅导书,2021该如何准备计算机二级考试?
- 大话synchronize底层原理
- 神兽来了服务器维护,20191204维护公告解读
- java 加日志_java中添加日志
- 【渝粤题库】陕西师范大学200471 英汉翻译
- sci写作sci写作模板_2020年写作主题
- docker mysql8
- hadoop完全分布式集群下安装sqoop
- vue-pdf安装之后,运行报错can not resolve ‘pdfjs-dist/es5/web/pdf_viewer‘
- word html 预览 打印出来,word打印预览显示全,但是打印出来不全
- 在腾讯开发QQ IM 的工作体验
- 【教程】创建活动报名二维码(活动报名/会议签到扫码,带微信手机号认证)
- Android实战技巧之三十四:用TableLayout伪装表格显示数据
- 华为手机传感器测试软件,华为P8拍摄能力测试 IMX278传感器到底魅力何在
- 学生的数学学习应当是一个生动活泼,积极主动和富有个性的过程,认真听讲,积极思考,动手实践,自主 探索,合作交流等都是学习数学的主要方式,请谈谈教师如何在教学中帮助学生养成良好的数学学习习惯(论述))
- 认证授权那点事儿 —— OAuth 2.0
- php根据URL获得网页内容
- Redis分布式中间件TwemProxy
- The Annotated Diffusion Model(翻译)
热门文章
- Linux脚本的制作命令
- 潜入浅出--通信中的频带利用率,以MASK.MPSK作为例子
- 基于若依系统进行模块化开发(使用eclipse)
- 网易2017校园招聘笔试题 优雅的点
- 计算机应用基础0006 19春在线作业2,《计算机应用基础0006》19春在线作业 参考资料...
- MySQL定时任务(EVENT|事件)如何配置,必会技能!
- Kinect for Windows SDK 1.6的改进及新特性
- 常见的随机变量分布律/概率密度、期望、方差以及特征函数
- 从FPGA到ACAP,“万能芯片”蝶变转型
- python 词云学习