来源:Java的10个最佳实践|中哦,这位作者的图表真的很有趣。这篇博文将讨论一些最常见的Java最佳实践,并解释它们为何重要。在决定什么是适合您的代码库时,请使用您的最佳判断。本博客只会向您展示每种实践的总体思路,但不会深入,如果您知道更多关于这些最佳实践的信息……咳咳……谷歌是你的朋友!格言?当你开始你的程序员职业生涯时,遵循一套标准规则可能是合适的。但是随着你的进步,你的技能会变得更强,你会开始培养初学者所缺乏的东西——品味。这种品味,这种通过实际经验获得的智慧,才是真正指导成熟程序员的东西。本质上,智慧超越规则。1.YourCodeIsLikeAStory(更重要)无论写得多么优雅,多么高效,多么c复杂的代码是,一段代码没有任何意义,除非它组织良好且易于遵循。这就是为什么最好的代码讲述一个清晰、简洁的故事,任何阅读它的人都可以轻松理解换句话说,你的代码应该像一本好的儿童读物:每一行都应该有表现力,并有助于整体的叙述。最好的代码往往是有创意和表现力的,如果你不能简单地解释它,说明你理解得不够好。但是上面所有,它应该易于阅读和理解2。使用设计模式设计模式可以为您节省大量编码时间和精力。但这并不是它们的全部好处。设计模式还可以让你的代码更具可读性和可维护性。所以如果你没有使用设计模式,你绝对应该考虑这样做。它们可能只是让你的代码更上一层楼的东西。我个人建议你专注于阅读更流行和c常用的设计模式并理解其背后的原因。3.FollowSOLIDPrinciplesSOLID的首字母缩写代表:单一职责原则(SRP)开闭原则(OCP)里氏替换原则(LSP)接口隔离原则(ISP)依赖倒置原则(DIP)这里有一个网站可以详细了解它们:Java中的SOLID原则是什么?(educative.io)如果没有时间阅读,这里有一些简单的代码示例作为参考:SingleResponsibilityPrinciple(SRP)通过应用SRP,我们可以将上面的类拆分成三个职责独立的类。public类Vehicle{publicvoidprintDetails(){}publicdoublecalculateValue(){}publicvoidaddVehicleToDB(){}}开闭原则(OCP)请阅读以下代码;publicdoublecalculateValue(Vehiclev){if(vinstanceofCar){返回v.getValue()*0.8;如果(vinstanceofBike){返回v.getValue()*0.5;我们将不得不通过添加另一个if语句来修改上述类,这违反了开闭原则。因此,我们尝试改造publicclassVehicle{publicdoublecalculateValue(){...}}publicclassCarextends车辆{publicdoublecalculateValue(){returnthis.getValue()*0.8;}}publicclassTruckextendsVehicle{publicdoublecalculateValue(){returnthis.getValue()*0.9;}}里氏替换原则(LSP)里氏替换原则(LSP)适用于继承层次结构,派生类必须完全可替换其基类。publicclassRectangle{privatedoubleheight;私人双倍宽度;publicvoidsetHeight(doubleh){height=h;}publicvoidsetWidht(doublew){width=w;}...}publicclassSquareextendsRectangle{publicvoidsetHeight(双h){super.setHeight(h);super.setWidth(h);}publicvoidsetWidth(doublew){super.setHeight(w);super.setWidth(w);}}接口隔离原则接口隔离原则(ISP)指出,不应强迫客户端依赖于他们不使用的接口成员。这是一个反例publicinterfaceVehicle{publicvoiddrive();公共无效停止();公共无效加油();公共无效openDoors();}publicclassBikeimplementsVehicle{//可以实现publicvoiddrive(){...}publicvoidstop(){...}publicvoidrefuel(){...}//不能实现publicvoidopenDoors(){...}}自行车显然不应该有门。ISP建议将接口分解为多个小的内聚接口,这样就不会强制类实现任何接口,因此也不会强制实现方法。不不需要。依赖倒置原则依赖倒置原则(DIP)指出我们应该依赖抽象(接口和抽象类)而不是具体实现(类)。让我们添加一个接口而不是Car直接依赖于Engine,让我们添加一个接口:...public接口引擎{publicvoidstart();}...publicclassCar{privateEngine引擎;公共汽车(引擎e){引擎=e;}publicvoidstart(){engine.start();}}publicclassPetrolEngineimplementsEngine{publicvoidstart(){...}}publicclassDieselEngineimplementsEngine{publicvoidstart(){...}}4。DRY&KISSDRY=Don'tRepeatYourselfKISS=KeepItSimpleStupidDRY:DRY原则表述为,“每个知识或逻辑在系统中都必须有一个单一的、明确的表示。”。将您的代码和逻辑分成更小的可重用单元并通过在你想要的地方调用它来使用该代码。KeyPoints:不要编写冗长的方法。KISS:系统中应尽可能避免复杂性。KISS是一种设计原则,它指出设计和/或系统应该尽可能简单。如果方法中有很多条件,请将它们分解成更小的方法。它不仅更易于阅读和维护,而且可以帮助更快地发现错误。要点:更小的方法。5。停止硬编码首先,它会使您的代码更难阅读和理解。其次,它会使您的代码的可重用性降低。最后,如果您硬编码到代码中的值碰巧发生变化(例如,ifthecurrentyearchanges.ifyoueverneedtousethesamepieceofcodewithdifferentvalues,you'llhavetogoinandmanuallychangethehardcodedvaluesHardcodingisjunkcode,Itususuallybetterinstead.6.CommentYourCodeCommentYourCode或者你有一个清晰的设计,哪个of当然很难。当你回过头来看你六个月前写的一段代码时,你很可能不记得它做了什么或它是如何工作的。但是如果你花时间留下清晰简洁的评论,你以后就会省去很多麻烦。此外,评论你的代码可以让其他人更容易理解和使用。所以下次你编程时,记得花几分钟评论你的代码。7。尽可能将类成员声明为私有经验法则是尽量隐藏信息,仅在绝对必要时才共享。因此,至于什么时候应该将内容设为私有:我会说默认情况下将所有内容设为私有,然后公开只有那些必须公开的部分。越多你可以让私人,better.8。使用StringBuilder/Buffer进行字符串操作9。学习检查Null一般而言,空变量、引用和集合在Java代码中很难处理。日它们不仅难以识别而且处理起来也很复杂。您可以通过多种方式检查空值并实际避免或处理它们。在之前的个人学习笔记中有一篇类似的文章:[[CheckingforNullsinJavaMinimizeUsingIfElse]]她提到的一些方法是:java.util.OptionalUtilityclassesofapache.commonsObjects::nonNullinStreamsrequireNonNullmethodsjava.util.ObjectsLombok的Builder.DefaultNotNull、NotEmpty、NotBlankAnnotations10。使用正确的命名约定在java中,将类、变量和方法命名为它们实际应该做的而不是随机命名是一种很好的做法。Java使用CamelCase作为编写方法、变量、类、包的名称的惯例,和常量。在用Java开发软件时必须遵循这些命名约定,以实现代码的良好维护和可读性。您可以查看以下文章以了解更多细节ailsofnamespecification,后续个人也会阅读这篇文章并整理笔记:最后重要的是要认识到,你学习的编码技术不应该盲目应用,不假思索。规则是盲目的,在这个意义上,他们往往不会处理问题的全部背景,或完整的画面。如果你已经考虑过这个问题,并且当你觉得这样做是合适的时候,你不应该害怕考虑打破规则。
