《Core Java 2》读书笔记(二)
1,防御性编程。必要时应当考虑采取保护性拷贝的手段来保护内部的私有数据,先来看下面这个例子:
- pubic final class Period
- {
- private final Date start;
- private final Date end;
- public Period(Date start, Date end)
- {
- if (start.compareTo(end) > 0)
- throw new IllegalArgumentException(start + "after " + end);
- this.start = start;
- this.end = end;
- }
- public Date getStart()
- {
- return start;
- }
- public Date getEnd()
- {
- return end;
- }
- }
这个类存在两个不安全的地方,首先来看第一个***代码
- Date start = new Date();
- Date end = new Date();
- Period p = new Period(start, end);
- end.setYear(78);//改变p的内部数据!
这是因为外部和内部引用了同样的数据,为了解决这个问题,应当修改Period的构造函数:
- public Period(Date start, Date end)
- {
- this.start = new Date(start.getTime());
- this.end = new Date(end.getTime());
- if (start.compareTo(end) > 0)
- throw new IllegalArgumentException(start + "after " + end);
- }
这样内部的私有数据就与外部对象指向不同,则不会被外部改变
再来看第二个***代码:
- Date start = new Date();
- Date end = new Date();
- Period p = new Period(start, end);
- p.getEnd().setYear(78);//改变p的内部数据!
这很显然是由于公有方法暴露了内部私有数据,我们可以只返回内部私有数据的只读版本(即其一份拷贝)
- public Date getStart()
- {
- return (Date)start.clone();
- }
- public Date getEnd()
- {
- return (Date)end.clone();
- }
2,读到上面这个例子,我想起来了下面这样的代码片段
- public class Suit
- {
- private final String name;
- private static int nextOrdinal = 0;
- private final int ordinal = nextOrdinal++;
- private Suit(String name)
- {
- this.name = name;
- }
- public String toString()
- {
- return name;
- }
- public int compareTo(Object o)
- {
- return o
- }
- public static final Suit CLUBS = new Suit("Clubs");
- public static final Suit DIAMONDS = new Suit("diamonds");
- public static final Suit HEARTS = new Suit("hearts");
- public static final Suit SPADES = new Suit("spades");
- private static final Suit[] PRIVATE_VALUES = {CLUBS,DIAMONDS,HEARTS,SPADES};
- public static final List VALUES = Collections.unmodifiedList(Arrays.asList(PRIVATE_VALUES));
- }
转载于:https://blog.51cto.com/phinecos/368955
《Core Java 2》读书笔记(二)相关推荐
- 深入理解JVM读书笔记二: 垃圾收集器与内存分配策略
3.2对象已死吗? 3.2.1 引用计数法 给对象添加一个引用计数器,每当有一个地方引用它的地方,计数器值+1:当引用失效,计数器值就减1;任何时候计数器为0,对象就不可能再被引用了. 它很难解决对象 ...
- 《Docker 技术入门与实践》-读书笔记二
<Docker 技术入门与实践>-读书笔记一 <Docker 技术入门与实践>-读书笔记二 一.数据管理 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据 ...
- 《Introduction To Modern Cryptography》读书笔记二
<Introduction To Modern Cryptography>读书笔记二 本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得 ...
- oracle直查和call哪个更快,让oracle跑的更快1读书笔记二
当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net 网友分享于:2013-08-23 浏览:9次 <> ...
- 《How Tomcat Works》读书笔记(二)
<How Tomcat Works>读书笔记(二) 这是<How Tomcat Works>第一二章的读书笔记.第一张主要写了一个静态资源处理的web服务器,第二章加了对ser ...
- 3D游戏设计读书笔记二
3D游戏设计读书笔记二 一.简答题 • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系. GameObjects是一个具体的实例,Assets是包括诸多游戏素材的资 ...
- 《李元芳履职记》读书笔记二 IT技术管理的沟通与团队建设
<李元芳履职记>读书笔记二 接一 https://blog.csdn.net/qq_45937199/article/details/103305223 IT技术人员从技术岗走向管理岗,所 ...
- python图像处理《数字图像处理与python实现》读书笔记二:空间滤波
文章目录 重要! 第三章 空间滤波 概览 3.1 空间滤波基础 3.1.1 空间滤波的机理 3.1.2 空间滤波器模板 3.2 平滑处理 3.2.1 平滑线性空间滤波器 3.2.2 统计排序滤波器 3 ...
- 第一行代码 Android读书笔记(二)
第一行代码 Android读书笔记 第三章 软件也要拼脸蛋-UI开发的点点滴滴 常用控件的使用方法 详解4种基本布局 自定义控件 最常用和最难用的控件-ListView 更加强大的滚动控件-Recyc ...
- 《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石
马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各 ...
最新文章
- 论文排版中页码的设置方法
- Leetcode 剑指 Offer 57 - II. 和为s的连续正数序列 (每日一题 20210809)
- flink社区提问没有人回答是怎么回事?
- java收获_java学习收获
- Raft协议安全性保证
- 信息奥赛一本通(1839:【05NOIP提高组】谁拿了最多奖学金)
- (转)基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder...
- 做IM netty的优势
- Win10 打开PLSql,其他软件卡到爆,原因CnPlugin_1.5.4插件的问题
- 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ
- 深度学习网络训练中出现nan的原因分析
- 如何解决Mac启动盘已满的问题?MacBooster帮你清理20种垃圾文件!
- HTML5小白长成记(5) ---img嵌入图片
- ubuntu服务器pdf文件大小,Ubuntu下的PDF阅读器okular安装使用介绍
- qq机器人插件之奥运奖牌获得数量
- 小程序中打开pdf文件(wx.downloadFile+wx.openDocument)
- 线性表长度(线性表实训)
- 数学物理方法 05 留数定理
- 中国常见空气质量数据标准汇总
- 多线程下载王者荣耀壁纸
热门文章
- 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题...
- yii 提交表单报400错误,提示 “您提交的数据无法验证”,问题处理。
- 查询各个商品分类中各有多少商品的SQL语句
- [转]对比Cassandra、 Mongodb、CouchDB、Redis、Riak、 Membase、Neo4j、HBase
- Proxmox VE2.2虚拟化安装配置学习笔记(三)
- 月薪20+的Android面试都问这些问题(含答案)
- 03-03 java 顺序语句结构,选择结构if语句
- Webpack入门——使用Webpack打包Angular项目的一个例子
- 【AS3 Coder】任务七:初涉PureMVC——天气预报功能实现
- 三言两语话敏捷(2) - 持续集成