news 2026/7/7 10:22:40

《Effective Java》第25条:限制源文件为单个顶级类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《Effective Java》第25条:限制源文件为单个顶级类

说明:

关于本博客使用的书籍,源代码Gitee仓库 和 其他的相关问题,请查看本专栏置顶文章:《Effective Java》第0条:写在前面,用一年时间来深度解读《Effective Java》这本书

正文:

Java允许我们在一个Java文件中,定义多个顶级类,并且可以正常编译和使用,但是这种方式是没有任何好处的,只会带来巨大的风险。

如书上举的例子:

正常情况下,在Utensil.java 源文件中定义 Utensil类 、在 Dessert.java 源文件中定义 Dessert类。是完全没有问题的。这也是我们经常做的。

当在 Utensil.java 源文件中定义 Utensil类 和 Dessert类,程序不会报错,执行也没问题

但是当再从 Dessert.java 源文件中定义 Utensil类 和 Dessert类,在idea中,程序就会编译出错,编译器会提醒你定义了多个Utensil 和Dessert类。

书中提到的使用命令符的 javac 命令,这里不再演示,也没有必要。

如果我们有在一个源文件中定义多个类的需求,那么最好的方式就是考虑使用静态成员类(详见第24条)。

总结:

原文P92:永远不要把多个顶级类或者接口放在一个源文件中。遵循这个规则可以确保编译时一个类不会有多个定义。这么做反过来也能确保编译产生的类文件,以及程序结果的行为,但会受到源文件被传给编译器时的顺序的影响。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 17:40:14

受控组件 vs 非受控组件

核心区别受控组件 (Controlled Components)由 React 完全控制,表单数据由 React 组件的 state 管理。非受控组件 (Uncontrolled Components)由 DOM 自身管理,通过 ref 获取表单值。详细对比特性受控组件非受控组件数据管理React stateDOM值更新onChange …

作者头像 李华
网站建设 2026/7/7 9:16:26

HTTPS 原理详解

1. HTTPS 是什么?HTTPS HTTP SSL/TLSHTTP:超文本传输协议(明文传输)SSL/TLS:安全套接层/传输层安全协议(加密层)2. 为什么需要 HTTPS?攻击类型HTTP 风险HTTPS 防护窃听数据明文传输…

作者头像 李华
网站建设 2026/7/7 9:35:35

Cookie 与 Session 的区别及 Cookie 传输机制

1. 核心区别对比表特性CookieSession存储位置客户端浏览器服务器端存储内容文本数据(key-value)对象数据(通常有Session ID)安全性较低(可被篡改)较高(服务器控制)存储大小每个域名通…

作者头像 李华
网站建设 2026/7/7 10:09:38

称重式雨雪量计:科技赋能,让降水监测更“智”在

称重式雨雪量计是一种基于称重原理的高精度、全天候降水量监测设备,能够准确测量液态、固态及固液混合态降水,广泛应用于气象、水文、农业、交通等多个领域。一、工作原理称重式雨量计基于称重原理技术,利用高精度称重传感器测量“降水增量”…

作者头像 李华
网站建设 2026/7/7 10:32:39

关于发那科机器人视觉补偿报警设置

! 程序名称:VISION_COMP! 功能:读取视觉系统发送的偏移量,并修正目标抓取位姿! 输入:! - GI[11]-GI[14]:视觉系统发送的原始补偿值(整数)! - PR[249]:预设的理论抓取目标位姿! - R[2…

作者头像 李华
网站建设 2026/7/7 12:02:41

基于单片机的多路温度检测语音报警系统设计

基于单片机的多路温度检测语音报警系统设计 第一章:系统设计目标与需求分析 本系统核心目标是实现多区域温度实时监测与异常语音报警,解决传统单路温控系统覆盖范围有限、报警方式单一的问题,适配工业车间、仓储库房、实验室等多场景温度管…

作者头像 李华