写Java程序最容易犯的21种错误-Java基础-Java-编程开发

代码坏味道有24种?我看未必! 《重构》的大佬Martin Fowler给出24种代码坏味道,但我看未必。我认为有些坏味道犯了“重复坏味道”的问题,所以我把它们汇总到最后一章重复的坏味道中,大家看完其他坏味道再看这些,便可很快理解。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

1.DuplicatedCode

代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste

的编程风格。与他相对应OAOO是一个好系统的重要标志(请参见我的duplicatedcode一文:http://www.erptao.org/download.php?op=viewsdownload&sid=6)。

2.Longmethod

它是传统结构化的“遗毒“。一个方法应当具有自我独立的意图,不要把几个意图放在一起,我的《大类和长方法》一文中有详细描述。

3.LargeClass

大类就是你把太多的责任交给了一个类。这里的规则是OneClassOneResponsibility。

4.DivergentChange

一个类里面的内容变化率不同。某些状态一个小时变一次,某些则几个月一年才变一次;某些状态因为这方面的原因发生变化,而另一些则因为其他方面的原因变一次。面向对象的抽象就是把相对不变的和相对变化相隔离。把问题变化的一方面和另一方面相隔离。这使得这些相对不变的可以重用。问题变化的每个方面都可以单独重用。这种相异变化的共存使得重用非常困难。

5.ShotgunSurgery

这正好和上面相反。对系统一个地方的改变涉及到其他许多地方的相关改变。这些变化率和变化内容相似的状态和行为通常应当放在同一个类中。

6.FeatureEnvy

对象的目的就是封装状态以及与这些状态紧密相关的行为。如果一个类的方法频繁用get方法存取其他类的状态进行计算,那么你要考虑把行为移到涉及状态数目最多的那个类。

7.DataClumps

某些数据通常像孩子一样成群玩耍:一起出现在很多类的成员变量中,一起出现在许多方法的参数中…..,这些数据或许应该自己独立形成对象。

8.PrimitiveObsession

面向对象的新手通常习惯使用几个原始类型的数据来表示一个概念。譬如对于范围,他们会使用两个数字。对于Money,他们会用一个浮点数来表示。因为你没有使用对象来表达问题中存在的概念,这使得代码变的难以理解,解决问题的难度大大增加。

好的习惯是扩充语言所能提供原始类型,用小对象来表示范围、金额、转化率、邮政编码等等。

9.SwitchStatement

基于常量的开关语句是OO的大敌,你应当把他变为子类、state或strategy。

10.ParallelInheritanceHierarchies

并行的继承层次是shotgunsurgery的特殊情况。因为当你改变一个层次中的某一个类时,你必须同时改变另外一个层次的并行子类。

11.LazyClass

一个干活不多的类。类的维护需要额外的开销,如果一个类承担了太少的责任,应当消除它。

12.SpeculativeGenerality

一个类实现了从未用到的功能和通用性。通常这样的类或方法唯一的用户是testcase。不要犹豫,删除它。

13.TemporaryField

一个对象的属性可能只在某些情况下才有意义。这样的代码将难以理解。专门建立一个对象来持有这样的孤儿属性,把只和他相关的行为移到该类。最常见的是一个特定的算法需要某些只有该算法才有用的变量。

14.MessageChain

消息链发生于当一个客户向一个对象要求另一个对象,然后客户又向这另一对象要求另一个对象,再向这另一个对象要求另一个对象,如此如此。这时,你需要隐藏分派。

15.MiddleMan

对象的基本特性之一就是封装,而你经常会通过分派去实现封装。但是这一步不能走得太远,如果你发现一个类接口的一大半方法都在做分派,你可能需要移去这个中间

人。

16.InappropriateIntimacy

某些类相互之间太亲密,它们花费了太多的时间去砖研别人的私有部分。对人类而言,我们也许不应该太假正经,但我们应当让自己的类严格遵守禁欲主义。

17.AlternativeClasseswithDifferentInterfaces

做相同事情的方法有不同的函数signature,一致把它们往类层次上移,直至协议一致。

18.IncompleteLibraryClass

要建立一个好的类库非常困难。我们大量的程序工作都基于类库实现。然而,如此广泛而又相异的目标对库构建者提出了苛刻的要求。库构建者也不是万能的。有时候我们会发现库类无法实现我们需要的功能。而直接对库类的修改有非常困难。这时候就需要用各种手段进行Refactoring。

19.DataClass

对象包括状态和行为。如果一个类只有状态没有行为,那么肯定有什么地方出问题了。

20.RefusedBequest

超类传下来很多行为和状态,而子类只是用了其中的很小一部分。这通常意味着你的类层次有问题。

21.Comments

经常觉得要写很多注释表示你的代码难以理解。如果这种感觉太多,表示你需要Refactoring。

21种代码的“坏味道” 21种代码的“坏味道”gigix2001-12-15 00:00:002029 次浏览1.Duplicated Code  代码重复几乎是最常见的异味了。他也是Refactoring 的主要目标之一。代码重复往往来自于copy-and-paste 的编程风格。与他相对应OAOO 是一个好系统的重要标志(请参见我的duplicated code 一文:http://www.erptao.org/do 阅读详情

相关推荐

代码异味(Code Smell)识别与重构指南

异味道出了代码演进过程中的自然产物识别与重构是一种工程素养持续改进才能让系统具备可持续发展能力🧭 代码异味不是要消灭的敌人,而是指引你写出更好代码的导航仪。每一次重构,都是对未来的投资。

九天的专栏 1826

代码异味(code smell):代码的坏味道

定义: 由于设计缺陷或不良编码习惯而引入程序的、导致深层次质量问题的代码症状。 常见的代码异味: 1 BLOB 实现多个职责、具有大量属性、操作、与数据类有依赖关系的类。 2 依恋情结 (Feature Envy) 一个类过度使用另一个类的方法。 3 过长方法 (Long Method) 函数方法的代码过长。 4 过长参数列表 (Long Pa...

qq_36911138的博客 6605

win10任务栏文件夹设置成竖形列表样式

win10任务栏文件夹设置成竖形列表样式

ftzchina的博客 7085

code-smell-1-定义

到这里你已经清楚重构到底是怎么做的。但是仅仅因为你知道怎么做并不代表你知道什么时候做。决定什么时候开始重构什么时候停止重构,是和知道怎么操作同样重要的。 现在困境来了。解释清楚如何删掉一个实例变量或者创建一个层级是很容易的。这些都是简单问题。试图解释什么时候你应该做这些事情却不是那么简单。比起呼吁一些编程美学的模糊观念(严格的说是我们咨询师通常在做的事情),我想说一些更实用的干货。

zuiku_baozi的专栏 1266

数学建模入门——数据预处理(全)

介绍了数据预处理的入门知识

n04j04h06的博客 4347

uniapp 基于单选框多选框实现上拉触底多选/单选、回显

showPickerCheckbox弹层显示 label和value 类似下拉框的label和value一个意思 键和值。结果:可以传接口(接口只能post请求) 可以搜索 下面是结果图片展示 单选多选都可以。fieldValue回显传的值 传的是字符串 数组的话[1,2]转为1,2格式传入。mode是控制的单选还是多选 true为多选默认值 其余参数 单选多选一样。fieldName字段名 确定后会返回该字段名 根据字段名找对应的传入值。问题:在uniapp上 实现分页多选的操作。下面是组件的完整代码。

2301_76607997的博客 2936

写java程序最容易犯的21种错误

1.DuplicatedCode代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。2.Longmethod它是传统结构化的“遗毒”。一个方法应当具有自我独立的意图,不要把几个意图放在一起,我的《大类和长方法》一文中有详细描述。3.LargeClass大类就是你把太多的

xyfttkx的专栏 591

招标文件智能解析系统开发文档

本系统是一个基于OCR与大语言模型的招标文件智能解析平台,专门用于处理和分析招标文件,自动提取关键信息并进行结构化展示。

警世龙的技术博客 1928

归纳:编写Java程序最容易犯的21种错误

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 267

No Target Connected 错误时的一种情况

STM32的SWD烧录模式No Target Connected 错误的一种情况 STM32的SWD烧录模式No Target Connected 错误时的一种处理情况 这是我第一次烧板子的时候遇到的问题,在给板子download的时候出现了“No Target Connected”的错误,这里讲一种解决方法。不一定适用于全部状况,但是可以作为一种纠错方法。 打开 Options for Target… 1.首先点击Options for Target…这个像魔棒一样的按键打开,会出现这个页面 2.点击

Logan_CodeGou的博客 1万+

LinuxCNC开发实战:从安装到EtherCAT配置全解析

本文详细解析LinuxCNC开发实战,从系统安装到EtherCAT总线配置全流程。涵盖实时内核优化、伺服驱动器PDO映射、HAL配置及自定义运动学开发,帮助开发者快速搭建工业级数控系统,提升运动控制精度与稳定性。

rgv234567的博客 354

Java程序最容易犯的21种错误

1.Duplicated Code代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。 2.Long method它是传统结构化的“遗毒”。一个方法应当具有自我独立的意图,不要把几个意图放在一起。 3.Large Class大类就是你把太多的责任交给了一个类

深山 971

【第一章】基于Simulink的控制器开发教程——目录

摘要:本文系统介绍了基于Simulink的控制器开发方法,涵盖PID、状态反馈、模型预测(MPC)、模糊控制、自适应控制等8类主流控制器。针对每种控制器,详细阐述了其基本原理、适用场景,并通过Simulink建模与仿真测试进行实践验证。文章采用"理论+实践"的结构,从算法设计到硬件实现全流程展开,为汽车、航空航天、工业控制等领域的控制器开发提供完整解决方案,最后通过应用对比与学习总结帮助读者掌握不同控制器的核心特性和应用场景。(149字)

熟悉MATLAB/fpga/RK3588/LABVIEW/protus/单片机/dsp/Multisim 394

写Java程序最容易犯的21种错误

 写Java程序最容易犯的21种错误1.DuplicatedCode代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志(请参见我的duplicatedcode一文:http://www.erptao.org/download.php?op=viewsdownlo

长空阁 1855

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3809

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java程序员最头疼的十大问题_Java程序员最常犯的错误盘点之Top 10

原标题:Java程序员最常犯的错误盘点之Top 10人非圣贤,孰能无过。都说Java语言是一门简单的编程语言,基于C++演化而来,剔除了很多C++中的复杂特性,但这并不能保证Java程序员不会犯错。那么对于广大的Java程序员来说,它们最常犯的10个错误是什么呢?本文通过总结出Java程序员最常犯的10大错误,可以有效地帮组Java后来者少走弯路,少加班,并写出更健壮的应用程序。1. 数组转Arr...

weixin_29504571的博客 1937

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java基础:Java开发最常犯的10个错误,你犯过几个?

阅读目录 前言 今天博主将为大家分享Java基础:Java开发人员最常犯的10个错误,你犯过几个?,不喜勿喷,如有异议欢迎讨论! 有一个强大的地基才能写出健壮的程序! Array转ArrayList 判断一个数组是否包含某个值 在循环内部删除List中的一个元素 HashTable与HashMap 使用集合原始类型(raw type) 访问级别 ArrayList和LinkedList 可变...

Mr_chen的博客 375

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

惊呆了!Java程序员最常犯的错竟然是这10个

和绝大多数的程序员一样,我也非常的宅。周末最奢侈的享受就是逛一逛技术型网站,比如说 programcreek,这个小网站上有一些非常有意思的主题。比如说:Java 程序员最常犯的错竟然是这 10 个,像这类令人好奇心想害死猫的主题,非常值得扒出来给大家分享一下。 PS:别问我“为什么标题要加上‘惊呆了’?”问了答案就只有一个——吓唬人——总得勾起大家的阅读兴趣嘛(我容易吗我)。 01、把 Arr...

沉默王二 1万+

有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误

Java 作为平台简化了软件开发中的许多事情,它依赖于复杂的 JVM 和语言本身。但是,它的功能,例如删除手动内存管理或体面的 OOP 工具,并不能消除普通 Java 开发人员面临的所有问题。与往常一样,知识、实践和此类 Java 教程是避免和解决应用程序错误的最佳方法 - 因此,了解您的库、请阅读 Java、阅读 JVM 文档和编写程序尤为重要。也不要忘记静态代码分析器,因为它们可以指向实际的 bug 并突出显示潜在的 bug。

龚小帅的博客 2033

编写Java程序最容易犯的21种错误

编写Java程序最容易犯的21种错误  1.Duplicated Code  代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。  2.Long method  它是传统结构化的"遗毒"。一个方法应当具有自我独立的意图,不要把几个意图放在一起。  3.Large Class 

yown的专栏 1001

写 Java 程序最容易犯的 21 种错误实例分析

作者tag:类 对象 子类 function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365

Vincent home 691

java代码中哪些不能犯的错误_写java程序最容易犯的21种错误

1.DuplicatedCode代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志(请参见:http://www.erptao.org/download.php?op=viewsdownload&sid=6)。2.Longmethod它是传统结构化的“遗...

weixin_34379710的博客 105

Java编程容易犯的错误汇总

JAVAZHICHIZHE的专栏 555

Java 开发最容易犯的 10 个错误

Java 的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为。这是一条算法方面的规约:按照算法的约定,Hashtable 是数据结构的名称,但是在 Java 中,数据结构的名称是 HashMap,Hashtable 和 HashMap 的主要区别之一就是 Hashtable 是同步的,所以很多时候你不需要 Hashtable ,而是使用 HashMap。,而由泛型附加的类型信息对 JVM 是看不到的。

白话机器学习 205
上一篇: Java 理论与实践: 伪typedef反模式-Java基础-Java-编程开发
下一篇: Java中正则表达式使用方法详解-Java基础-Java-编程开发
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值