**号外:为读者持续整理了几份最新教程,覆盖了 Spring Boot、Spring Cloud、微服务架构等PDF。
获取方式:关注右侧公众号"泥瓦匠BYSocket",来领取吧!**
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!
目录
有个小故事,今天群里面有个人问下面如图输出什么?
我回答:60。但这是错的,答案结果是 40 。我知错能改,然后说了下父子类变量不建议同一个名称。
可见,父子变量名相同会令人 “Confusing”。再举个例子,新建 ParentClass 类:
public class ParentClass {
public String name = "parent";
public static void main(String[] args) {
ParentClass parentClass = new SonClass();
SonClass sonClass = new SonClass();
System.out.println("parentClass.name = " + parentClass.name);
System.out.println("sonClass.name = " + sonClass.name);
System.out.println("debug...");
}
}
class SonClass extends ParentClass {
public String name = "son";
}
上面如果答对的,这个肯定知道结果。运行程序打印如下:
parentClass.name = parent
sonClass.name = son
debug...
断点到 System.out.println("debug...");
该行,debug
下如图:
debug 后,答案显然:
son
和 parent
两个 String 的对应指针数一样,一个为 440/一个为 439这就引出了变量的知识点,如手工画的图:
对于方法重写而言,重写方法是完全替换掉继承而来的方法,尝试通过持有子类对象的父类引用去访问某个方法,那么实际这个来自于子类的方法将会被调用。
但是对于变量隐藏而言,子类是隐藏继承而来的变量,而不是替换掉它们。因此,尝试通过持有子类对象的父类引用去访问某个去访问某个变量,那么实际访问的是来自于父类的变量。
阿里巴巴 Java 手册是这样写的:
【强制】避免在子父类的成员变量之间或者不同代码块的局部变量之间采用完全相同的命名方式,那会导致代码可读性降低。
说明:子类、父类成员变量名相同,即使属性是 public 也是能通过编译,虽然局部变量不在同一方法内的不同代码中同名也是合法的,但避免使用。 setter / getter 的参数名称也避免成员变量名相同。
具体的反例我也不写了。为啥强制,显而易见有几点:
可以提高代码可读性
正确的例子 ParentClass 类:
public class ParentClass {
public String parentName = "parent";
public static void main(String[] args) {
ParentClass parentClass = new SonClass();
SonClass sonClass = new SonClass();
System.out.println("parentClass.parentName = " + parentClass.parentName);
System.out.println("sonClass.sonName = " + sonClass.sonName);
System.out.println("debug...");
}
}
class SonClass extends ParentClass {
public String sonName = "son";
}
两种写法的优缺点,一目了然。
这里是说了一种代码风格,类似味道。本身不影响程序运行,没有所谓的潜在故障和错误。那么味道的好处总会能体验到。
* 比如这里谈到继承,OOP 讲究:高内聚,低耦合;多组合,少继承。比如控制语句,推荐多层嵌套不超过 3 层。那继承也一样:推荐继承关系不超过 3 层。
* 还有 Boolean 成员变量定义,命名不要加 is 前缀。不然 getter 方法会少了 is,部分解析会引起序列化问题。我的做法:在设计数据库表字段的时候,不考虑 Boolean ,用 Byte 类型去处理。这样 is 不 is 就不 care 了。
* 如果是 static 静态变量或方法,不要用实例来访问,直接类名来访问。可以减少编译器的解析成本。
* …
好的命名规约,好的编码风格,简捷清爽,引出无限风光
本文示例读者可以通过查看下面仓库的中的 alibaba/java/ParentClass.java :
如果您对这些感兴趣,欢迎 star、follow、收藏、转发给予支持!
(关注微信公众号,领取 Java 精选干货学习资料)
Original url: Access
Created at: 2019-04-12 14:49:05
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论