文档章节

【45】java的封装剖析

fengsehng
 fengsehng
发布于 2016/11/09 09:15
字数 461
阅读 3
收藏 0

类是构造对象的模板或蓝图。

封装的一些概念

从形式上看,封装不过是将数据和行为组合到一个包中,并对对象的使用者隐藏了数据的实现形式。

每个对象都包含实例域和方法。实例域的集合代表了一个集合的状态,通过方法来向对象发送消息,改变对象的状态。

封装的意义

实现封装的目的就是不让其他类的方法访问自己的实例域。
程序是通过类的方法进行交互。封装给了对象黑盒的特性,这是提高重用性和可靠性的关键。

降低了类之间的耦合性

一个对象无法访问其他的类的对象的数据,所以不对其他的类依赖,降低了耦合性。

方便数据域的错误检查

可以直接查找类的相应的方法,而不用排查其他的情况。

封装的注意事项:

不要编写返回引用可变对象的访问器方法

举个例子:

class Emplyee{
    private Date day;
    public Date getDay(){
        return day;
    }
}

上面的例子破坏了封装性

Emplyee harry;
Date d = harry.getDay();
d.setTime(new Date(););

出错的原因

d和day引用的是一个对象。对d改变。对象的私有实例域也会改变。

如何避免:

返回一个可变对象引用的克隆。

class Emplyee{
    private Date day;
    public Date getDay(){
        return day.clone();
    }
}

欢迎入群:

公众号IT面试题汇总讨论群

这里写图片描述

如果扫描不进去,加我微信(rdst6029930)拉你。

扫我微信二维码加我

这里写图片描述

欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

这里写图片描述

© 著作权归作者所有

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
私信 提问
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
Vert.x中国用户组(上海地区)第一次技术沙龙

导读 是否还在羡慕node.js程序员秀事件驱动编程?Golang程序员秀coroutine? Java8内置了Lambda表达式,函数式编程,全新异步API等全新功能,但是否还是觉得无法在传统的Java项目有用武之地?...

力谱宿云
2016/07/04
384
1
YourKit 12.0.4 发布,Java 程序剖析工具

YourKit 12.0.4 修复了一些采样分配的录制问题,这个问题会导致 CPU 采样异常;JRE 升级到 Java 7. YourKit Java Profiler 是业界领先的Java和.NET的剖析工具。CPU和内存的剖析历来是很困难的...

oschina
2013/04/13
1K
2
JProfiler 7.0 发布,Java性能剖析工具

该版本增加对 JDBC, JMS, JNDI, servlets, 文件、套接字以及进程的剖析;增加多线程和并行应用中新的 CPU 请求跟踪和调用树形视图;Major heap walker improvements include filters in the...

红薯
2011/07/22
2.7K
6
ubuntu 下切换jdk版本

因为ubuntu 会自带open-jdk预装在系统内,当我们需要在 ubuntu下 安装jdk 的时候 ,发现 即使配置好环境变量后, 输入 java -version 版本还是依然没有发生变化,我们需要以下2个步骤切换/usr/lo...

党程V
2015/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[LintCode] Binary Tree Level Order Traversal(二叉树的层次遍历)

描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [...

honeymose
11分钟前
1
0
Spring Cloud Config 规范

Spring Cloud Config 规范 首先Spring Cloud 是基于 Spring 来扩展的,Spring 本身就提供当创建一个Bean时可从Environment 中将一些属性值通过@Value的形式注入到业务代码中的能力。那Sprin...

阿里云官方博客
21分钟前
1
0
renderer

renderer Function 单元格绘制处理函数,同drawcell事件。

architect刘源源
32分钟前
5
0
jdk1.8 lambda表达式过滤重复的对象

//操作类public class BizAgentAudit {    private String supplierOrgId;    private int age;    private String name;        public BizAgentAudit() { ...

INSISTQIAO
33分钟前
6
0
DataUtil的日期处理

SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为static,必须加锁,或者使用 DateUtils 工具类。 解决方法 1、将SimpleDateFormat定义成局部变量。 缺点:每调用...

DoLo-lty
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部