Effective Java笔记(16)要在公有类而非公有域中使用访问方法

模拟IC设计笔记:拆解一个经典的时钟占空比校正(DCC)电路模块,从理论到SPICE仿真 本文深入解析了时钟占空比校正(DCC)电路在模拟IC设计中的关键作用,特别是在高速ADC应用中。通过晶体管级拆解,详细介绍了基于电荷泵和积分器的模拟反馈型DCC电路设计,包括占空比检测、误差放大与校正执行单元的实现。文章还提供了SPICE仿真验证方法,确保电路在100MHz时钟下的稳定性和性能。 阅读详情

        有时候,可能需要编写一些退化类,它们没有什么作用,只是用来集中实例域 :

class Point {
    public double x;
    public double y;
}

        由于这种类的数据域是可以被直接访问的,这些类没有提供封装( encapsulation )的功能。 如果不改变 API,就无法改变它的数据表示法, 也无法强加任何约束条件;当域被访问的时候,无法采取任何辅助的行动 。 坚持面向对象编程的程序员对这种类深恶痛绝,认为应该用包含私有域和公有访问方法( getter ) 的类代替 。 对于可变的类来说,应该用公有设值方法( setter )的类代替 :

class Point {
    private double x;
    private double y;
    pub1ic Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
    public double getX() { return x; }
    public double getY() { return y; }
    public void setX(double x) { this.x = X; }
    public void setY(double y) { this.y = y; }
}

        毫无疑问,说到公有类的时候,坚持面向对象编程思想的看法是正确的 : 如果类可以在它所在的包之外进行访问,就提供访问方法,以保留将来改变该类的内部表示法的灵活性 。如果公有类暴露了它的数据域 ,要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了 。

        然而 , 如果类是包级私有的,或者是私有的嵌套类, 直接暴露它的数据域并没有本质的错误——假设这些数据域确实描述了该类所提供的抽象 。 无论是在类定义中,还是在使用该类的客户端代码中,这种方法比访问方法的做法更不容易产生视觉混乱 。 虽然客户端代码与该类的内部表示法紧密相连,但是这些代码被限定在包含该类的包中 。 如有必要,也可以不改变包之外的任何代码,而只改变内部数据表示法 。 在私有嵌套类的情况下,改变的作用范围被进一步限制在外围类中 。

        让公有类直接暴露域虽然从来都不是种好办法,但是如果域是不可变的,这种做法的危害就比较小一些 。 如果不改变类的 API ,就无法改变这种类的表示法,当域被读取的时候,你也无法采取辅助的行动,但是可以强加约束条件 。 例如,这个类确保了每个实例都表示一个有效的时间:

public final class Time {
    private static final int HOURS_PER_DAY = 24;
    private static final int MINUTES_PER_HOUR = 60;

    public final int hour;
    public final int minute;
    
    public Time(int hour, int minute) {
        if (hour < 0 || hour >= HOURS_PER_DAY)
            throw new IllegalArgumentException("Hour: " + hour);
        if (minute < 0 || minute >= MINUTES_PER_HOUR)
            throw new IllegalArgumentException("Min:"+ minute);
        this.hour = hour;
        this.minute = minute;
    }
    ... // Remainder omitted
}

        简而言之,公有类永远都不应该暴露可变的域 。 虽然还是有问题,但是让公有类暴露不可变的域,其危害相对来说比较小 。 但有时候会需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是可变的还是不可变的 。

性能调优秘籍——让OpenClaw运行速度提升10倍(2026优化版) OpenClaw性能优化核心摘要 本文详细介绍了提升OpenClaw系统性能的关键技术,包括: 使用性能分析器进行代码级性能诊断 内存优化与高效缓存策略 并发处理优化技术 数据库查询性能提升方法 重点内容包括: 全面的性能分析工具实现(计时、内存监控、错误跟踪) 自动生成性能报告和优化建议 操作耗时与内存占用分析算法 关键性能指标(平均耗时、内存增长)计算 通过系统性的性能分析优化,可使OpenClaw运行速度提升10倍以上。 阅读详情

相关推荐

UE5 Mass交通规则设计指南:从Stop Sign到智能红绿灯的进阶配置

本文详细解析了UE5 Mass框架下的交通规则设计,从基础Stop Sign到智能红绿灯的进阶配置。通过UMassTrafficIntersectionSpawnDataGenerator等核心组件,实现动态响应、自然流畅的交通行为系统,提升虚拟城市的真实感与游戏性。

weixin_30500105的博客 502

《Effective Java》第16条:要在公有类而非公有域中使用访问方法

原文P63:然而,如果类是包级私有的,或者是私有的嵌套类,直接暴露它的数据域并没有本质的错误。比如一个人(user),他的名字,年龄,性别,都是他的私有属性。所以:原文P63:毫无疑问,说到公有类的时候,坚持面向对象编程思想的看法是正确的:如果类可以在它所在的包之外进行访问,就提供访问方法,以保留将来改变该类的内部表示法的灵活性。这种源码不值得效仿。书中最后给的例子(Time类),说明了,如果一个域是final的,那么将final域设置为public的,这种危害相对于小一些,但是这种做法依然是不提倡的!

TD_FAlmK的博客 397

(MATLAB)一维信号峰值检测findpeaks

一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。

HPC_ZY 2万+

《Effective Java》第16条:要在仅有类中使用访问方法而非公有域

简而言之,公有类永远都不应该暴露可变的域。

ln_ydc的专栏 193

TMP112/TMP102温度传感器驱动开发与嵌入式实战

数字温度传感器是嵌入式系统环境感知的核心器件,其通过I²C等标准总线实现高精度、低功耗测温。原理上依赖ΔΣ模数转换与二进制补码数据格式,结合寄存器配置实现模式控制、阈值报警与功耗管理。技术价值体现在±0.5°C级精度、1μA级静态电流及SOT-563超小封装带来的系统集成优势。广泛应用于工业MCU热监控、电池物联网终端、医疗电子温度补偿及汽车ECU板级测温等场景。本文围绕TMP112/TMP102展开,深入解析寄存器协议、硬件接口约束、HAL驱动分层设计、FreeRTOS任务调度及生产级校准方法,覆盖从芯片

weixin_35756690的博客 674

Allegro如何去掉PCB内层未使用的过孔孔环?

在用Allegro进行PCB设计过程中,遇到铺铜铜箔被焊盘大量割断,导致铺铜不完整,这样就会导致铺铜过电流太小,影响板的性能,严重的会导致板工作不稳定,甚至不工作。解决办法:是去掉内层未使用的过孔孔环,增大过铜箔面积。

bhxc809751502的博客 2571

【读书笔记】Effective Java(类和接口)

读书笔记-Effective Java(类和接口)

我的博客 392

echarts 饼图(加载进度条动画效果)

1、外侧动画细线效果运动“custom”自定义系列中“renderItem”属性来实现,动态修改起始角度和终止角度。2、圆环使用" pie "类型添加两个data值来画百分比圆环,动态修改data中的值。

God's asylum的博客 1630

[Java读书笔记] Effective Java(Third Edition) 第 4 章 类和接口

第 15 条: 使类和成员的可访问性最小化 软件设计基本原则:信息隐藏和封装。 信息隐藏可以有效解耦,使组件可以独立地开发、测试、优化、使用和修改。 经验法则:尽可能地使每个类或者成员不被外界访问。 对于成员(属性、方法、嵌套类和嵌套接口),有四种可能的访问级别,在这里,按照可访问性从小到大列出: private —— 该成员只能在声明它的顶层类内访问。 ...

weixin_30702887的博客 221

基于matlab的CNN验证码识别系统(UI界面版)

基于matlab的CNN验证码识别系统(UI界面版),CNN验证码识别系统包括数据集处理、模型搭建、模型训练、界面设计与实现

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 484

数字信号处理----数字上变频和下变频都FPGA实现

** 数字信号处理基础----信号下变频和解调 一、 任务介绍 数字上变频器(DUC)和数字下变频器(DDC)广泛应用于通信系统,用于信号采样速率的转换。当信号从基带转换至中频( IF )带,需要使用数字上变频器。而数字下变频器是用于将信号从中频( IF )带转换为基带。DUC和DDC通常包括使用混频器进行频率转换,此外还有采样率转换。DUC或DDC的结构主要取决于所需要的转换率。例如,WiMAX (全球互通微波接入)系统典型的转换率为8—10阶。对于如此低的转换率,DUC和DDC只需采用FIR滤波器架构。

Born_toward的博客 3万+

Effective Java读书笔记(第4章-类和接口)

第4章  类和接口

lyl_tkb的专栏 499

气象水文资料预处理:缺测数据插补延长等

简介气象水文资料预处理

WW、forever的博客 3772

Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule15~Rule19

Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule15~Rule19 本文主要介绍了类和接口相关的内容

weixin_44453385的博客 713

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Effective Java 【类和接口】第16条 在公共类而非公有域使用访问方法

目录 本周总结为一句话,对于共有类(public类),不应该暴露可变数据域,应该提供访问方法。这样无法对数据加以约束,如果使(final)不可变数据域则危害性稍微小一点。常见的做法就是我们通常给变量设置getter和setter方法。 class Point { private double x; private double y; public final String z; public Point(double x, double y,String z) {

zhangxiaoxiao9527的博客 169

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Effective Java 类和接口 第16条:复合优先于继承

Effective Java 类和接口 第16条:复合优先于继承 继承(inheritance)是实现代码重用的有力手段,但它并非永远是完成这项任务的最佳工作。使用不当会导致软件变得很脆弱。在包的内部使用继承是非常安全的,在那里,子类和超类的实现都处于同一个程序员的控制下。对于专门为了继承而设计的并且具有很好的文档说明的类来说,使用继承也是非常安全的。然而,对于普通的具体类进行跨超包边界的继承则...

yancyang的博客 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

《Effective java》笔记(第二版) --第四章(13-16)

个人笔记第三章 ——类和接口第十三条: 使类和成员的可访问性最小化尽可能使每个类或者成员不被外界访问私有的东西将不被智能提示和导出到API文档中,这是内部的实现,而不是给外部暴露用,为了不使用户(使用这个类的人)疑惑和增加类的可变性,类暴露的接口,不是private修饰的都是可以被使用的,那么如果别人使用了你不该使用的部分,而你这个类下个版本更新,却删除了这个方法,将不止导致用户对于你的类的厌恶,而

syk1996的博客 427

Effective Java第二版第4章

4 类和接口 第13条 使类和成员的可访问性最小化 当访问级别从default变成protected的时候,会大大增加可访问性。protected的成员是类导出的API的一部分,必须永远得到支持。导出的类的protected成员也代表了该类对于某个实现细节的公开承诺。受保护的成员应该尽量少用。 **实例域决不能是公有的。**如果域是非final的,或者是一个指向可变对象的final引用,那么一旦使这个域成为共有的,就放弃了对存储在这个域中的值进行限制的能力;这意味着,你也放弃了强制这个域不可变的能力。同时,

kaikai_sk的博客 2624

Effective Java 学习总结

Effective Java 作为 Java 四大名著之一,聚焦于 Java 语言习惯和高效的用法。EJ 告诉读者如何更好地构建代码,以便代码能够更好地工作;也便于其他人能够理解这些代码,便于修改和改善;程序也会因此变得更加令人愉快,更加优雅。全书共90条,接下来笔者将逐条进行总结。不应该使用常量接口。一个类在内部使用某些常量是实现细节,常量接口会把这样的实现细节泄露到该类的导出 API 中标记接口:不包含方法声明的接口,它只是指明一个类实现了某种属性的接口。

Alioth4J的博客 2255

带你快速看完9.8分神作《Effective Java》—— 类和接口篇

???? Java学习:Java从入门到精通总结 ???? Spring系列推荐:Spring源码解析 ???? 最近更新:2022年1月7日 ???? 个人简介:通信工程本硕????、阿里新晋猿同学????。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤 ???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力! 15 使类和成员的可访问性最小化 面向对象语言设计时的两大“法宝”就是封装和解耦。其中,封装可以隐藏组件所有的实现细节,把API与实现清晰隔离开,因此也就解除组成系

如切如磋,如琢如磨 1957

Effective-java-读书笔记之类和接口

类和接口的讲解

constant_rain的博客 383

Effective java 总结3 - 类和接口

类和接口是Java语言的核心,也是基本抽象单元当类实现接口时,接口就充当可以引用这个类的实例的类型常量接口是对接口的不良引用接口不包含方法,只有静态的final域,每个域导出一个常量正确使用枚举类or常量类}//阻止实例化publicstaticfinalintMIN_VALUE=111;...}接口应该只被用来定义类型,不应该被用来导出常量。...

ym & blog 369

Effective Java 第三版 中文翻译

effective-java-third-edition 介绍 Effective Java 第三版全文翻译,纯属个人业余翻译,不合理的地方,望指正,感激不尽! 目录 推荐序 前言 致谢 第一章 引言 第二章 创建和销毁对象   本章涉及创建和销毁对象,包括何时以及如何创建它们,何时以及如何避免创建它们,如何确保它们被及时销毁,以及如何管理在销毁之前必须进行的清理操作。 第1项:考虑静态工...

Coloured_Glaze的博客 3861

Effective Java 高效编码阅读 笔记

函数参数可以传入类似listener的对象,目的是使用listener中的方法。如果使用匿名的参数,每一次调用会创建新的对象。可以将listener声明为成员变量,每次都复用同一个对象,并且可以使用静态域(static变量)。比如String类的域。

程序员小刘 1927

【Effective Java】第4章 读书笔记

第4章 类和接口 15,使类和成员可访问性最小化 尽可能地使每个类或者成员不能被外界访问。 公有类的实例域绝不能是公有的。 包含公有可变域的类通常并不是线程安全的。 让类具有公有的静态 final 数组域,或者这种域的访问方法是错误的。 16,要在公有类中使用访问方法而非公有域 公有类永远都不要暴露可变的的域 17,使可变性最小化 不可变类是指实例不可以被修改的类 17.1 不可变类要遵循的五条原则: 不要提供任何可以修改对象状态的方法。 保证类不会被扩展。 声明所有的域都是 final 的。 声明所有的

qq_45050687的博客 1330

《Effective Java 2nd》第4章 类和接口

目录 第13条: 使类和成员的可访问性最小化 第14条:在公有类中使用访问方法而非公有域 第15条:使可变性最小化 第16条:复合优先于继承 第17条:要么为继承而设计,并提供文档说明,要么就禁止继承 第18条:接口优先于抽象类 第19条:接口只用于定义类型 第20条:类层次优于标签类 第21条:用函数对象表示策略 第22条:优先考虑静态成员类 ...

weixin_34319817的博客 95
上一篇: Effective Java笔记(15)使类和成员的可访问性最小化
下一篇: 深入理解Java虚拟机(一):Java虚拟机家族
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值