Java代码最佳实践,看这一篇就够了

基于Oracle,Google,Twitter和SpringFramework的编码标准

本文的目的是为您提供基于Oracle,Google,Twitter和SpringFramework等技术巨头的编码标准的"做与不做"的简要概述,换句话说,您更喜欢和避免。

您可能同意或不同意此处介绍的一些最佳做法,并且只要有某种编码标准就可以了。

为什么首先要编码标准?如果您使用Google进行搜索,有很多充分的理由,下面将为您提供以下插图

编码标准文档可能冗长而乏味。本文从Google,Oracle,Twitter和Spring的编码约定中挑选了一些零碎的内容,其目的是为您提供易于理解且较无聊的做法,以使您的代码易于阅读和维护。

几乎总是您会加入使用现有软件的团队,并且大多数作者很有可能离开或切换到其他项目,这使您陷入困扰人类的部分代码。

让我们深入了解各种编码标准中的最佳做法。

Java源文件

关于Java源文件,以下内容被视为最佳实践:

·源文件长度小于2,000行代码

packagecom.example.model;

/**

*Implementation-freeperspectivetobereadbydevelopers

*whomightnotnecessarilyhavethesourcecodeathand

*

*@authorx,y,z

*@date

*@version

*@copyright

*/

importcom.example.util.FileUtil;

/*

*Optionalclassspecificcomment

publicclassSomeClass{

//Staticvariablesinorderofvisibility

publicstaticfinalIntegerPUBLIC_COUNT=1;

staticfinalIntegerPROTECTED_COUNT=1;

privatestaticfinalIntegerPRIVATE_COUNT=1;

//Instancevariablesinorderofvisibility

publicStringname;StringpostalCode;

privateStringaddress;

//Constructorandoverloadedinsequentialorder

publicSomeClass(){}

publicSomeClass(Stringname){

this.name=name;

}

//Methods

publicStringdoSomethingUseful(){

return"Somethinguseful";

//getters,setters,equals,hashCodeandtoStringattheend

}命名

类和接口的名称均为CamelCase,建议使用整个单词,并避免使用缩写词/缩写。例如Raster类或ImageSprite类

·包-在com.deepSpace或com.deep_space上命名com.deepspace

·文件-名称为CamelCase,以.java结尾,与类名匹配。每个文件有一个公共类,文件中有每个顶级类

·方法-名称应为混合大小写的动词,每个内部单词用大写字母表示,例如run();或runFast();

·常量-应该用大写字母"_"分隔每个单词,例如intMIN_WIDTH=44;并且intMAX_WIDTH=99;

·变量-一个名称,告诉程序的读者变量代表什么,即,如果要存储测试等级,则选择等级vsvar1。变量名要简短,避免包含元数据。

//Prefer()-variablenamesshortanddescribewhatitstores

intschoolId;

int[]filteredSchoolIds;

int[]uniqueSchooldIds;

MapusersById;

Stringvalue;

//Avoid(x)-Toodetailedvariablenaming

intschoolIdentificationNumber;

int[]userProvidedSchoolIds;

int[]schoolIdsAfterRemovingDuplicates;

MapidToUserMap;

StringvalueString;

请记住,变量名应该简短,并易于告诉读者它代表什么值。用你的判断。

倾向性和避免

格式和缩进都是组织代码以使其易于阅读,其中包括间距,行长,换行和换行等

·缩进-使用2或4个空格或制表符并保持一致

·行长-取决于可读性的影响,最多70至120个字符。消除水平滚动和在逗号和运算符后放置换行符的需求非常重要。

方法-以下是最佳做法清单

//Prefer()Linebreaksarearbitraryandbreakafteracomma.

StringdownloadAnInternet(Internetinternet,

Tubestubes,

Blogosphereblogs,

Amountbandwidth){

tubes.download(internet);

//Avoid(x)Hardtodiffmethodargstomethodbody

//Prefer()Add8(doubleof2or4)spacesfordeepindent

privatestaticsynchronizedhorkingLongMethodName(intanArg,

ObjectanotherArg,

StringyetAnotherArg,

ObjectandStillAnother){

...

//Prefer()Easyscanningandextracolumnspace.

publicStringdownloadAnInternet(Internetinternet,

>Aunittestwouldhavecaughtthat

//Avoid(x)Donotomit{}

if(condition)

statement;

//Avoid(x)

if(x<0)negative(x);

if(a==b&&c==d){

//Prefer()

if((a==b)&&(c==d)){

if(condition){

statements;

}elseif(condition){

if((condition1&&condition2)

||(condition3&&condition4)

||!(condition5&&condition6)){//BADWRAPS

doSomethingAboutIt();//MAKETHISLINEEASYTOMISS

||!(condition5&&condition6)){

doSomethingAboutIt();

三元运算符-以下是推荐做法

alpha=(aLongBooleanExpression)beta:gamma;

alpha=(aLongBooleanExpression)beta

:gamma;

alpha=(aLongBooleanExpression)

beta

Switch-切换时,最佳做法是

·即使没有代码也总是有默认default情况

·使用/*fallsthrough*/表示控件属于下一种情况

switch(condition){

caseABC:

/*fallsthrough*/

caseDEF:

break;

default:

异常消息-引发异常时,这里是缩进和缩进不好的消息的示例。

//Avoid(x)-Noteasytoread

thrownewIllegalStateException("Failedtoprocessrequest"+request.getId()

//Prefer()-Fairlyeasiertoread

thrownewIllegalStateException("Failedtoprocess"

+"request"+request.getId()

+"foruser"+user.getId()

迭代器和流-流变得越来越普遍,有时可能非常复杂,因此,缩进以便于阅读非常重要。

Iterablemodules=ImmutableList.builder().add(newLifecycleModule())

.add(newAppLauncherModule()).addAll(application.getModules()).build();

Iterablemodules=ImmutableList.builder()

.add(newLifecycleModule())

.add(newAppLauncherModule())

.addAll(application.getModules())

>Justfollowacodingstandard—anyreally

intlevel;//indentationlevel

intsizeMeter;//sizeoftable

//Avoid(x)infavourofabove

intlevel,sizeMeter;

//Prefer()-Includeunitinvariablenameortype

longpollIntervalMs;

intfileSizeGb;

AmountfileSize;

//Avoid(x)mixingtypes

intfoo,fooarray[];

//Avoid(x)-Donotseparatewithcomma

Format.print(System.out,“error”),exit(1);

//Avoid(x)multipleassignment

//Avoid(x)embeddedassignmentsinattempttoincreaseperformance//orsavealine.Iamguiltyofdoingthis:(

d=(a=b+c)+r;

//Prefer()overabove

a=b+c;

d=a+r;

String[]args

Stringargs[]

//Prefer()Longuse"L"insteadof"l"toavoidconfusionwith1

longtimeout=3000000000L;

//Avoid(x)-Hardtotelllastletterislandnot1

longtimeout=3000000000l;

//Prefer()declareatthebeginningoftheblock.

publicvoiddoSomething(){

intwhatIRepresent;//beginningofmethodblock

intsomeFlag;//beginningof“if”block

intcount;

intcount;//AVOID!

间距和换行符—避免以牺牲可读性为代价来保存1-2行代码的诱惑。这是有关间距和空白行的所有最佳实践(空格确实有所作为)

·方法和Spring开发人员之间的一(1)条空行建议在构造函数,静态块,字段和内部类之后的两(2)条空行

·空格键运算符,即使用intfoo=a+b+1;而非intfoo=a+b+1;

·分隔除"."外的所有二进制运算符。使用空格分割

//Prefer()-Spaceafter"while"andbefore"("

while(true){

//Avoid(x)-Unlikeabovenospace

//Prefer()-Nospacebetween"doSomething"and"("

//Avoid(x)-Unlikeabovespace

//Prefer()-Addaspaceafteranargument

publicvoiddoSomething(inta,intb){

//Prefer()-Spacebetweenoperandandoperators(i.e.+,=)

a+=c+d;

a=(a+b)/(c*d);

while(d++=s++){

n++;

}文档和注释

值得一提的是,几乎所有代码都会在其整个生命周期中进行更改,除非您明确说明,否则有时您或某人会试图弄清楚打算使用复杂的代码块,方法或类做什么。现实几乎总是如下

有时,对复杂的代码,方法,类的注释不会增加任何值或无法达到其目的。为此,通常在注释时会发生这种情况。

实施注释—用于注释掉代码或对代码的特定实现进行注释。

文档注释—旨在从无实现的角度描述代码规范,以供可能不一定拥有源代码的开发人员阅读。

注释的类型

共有四(4)种实施注释,如下所示

·块注释-请参见下面的示例

·单行注释-当注释不超过一行时

·行尾注释—开始注释,并继续到换行符。它可以注释掉整行或仅部分行。不应在连续的多行中使用它来进行文本注释;但是,它可以在连续的多行中用于注释掉代码段。

//Blockcomment

*Usage:Providesdescriptionoffiles,methods,datastructures

*andalgorithms.Canbeusedatthebeginningofeachfileand

*beforeeachmethod.Usedforlongcommentsthatdonotfita

*singleline.1Blanklinetoproceedaftertheblockcomment.

//Singlelinecomment

/*Handlethecondition.*/

//Trailingcomment

if(a==2){

returnTRUE;/*specialcase*/

}else{

returnisPrime(a);/*worksonlyforodda*/

//Endoflinecomment

if(foo>1){

//Doadouble-flip.

returnfalse;//Explainwhyhere.

//if(bar>1){

//

////Doatriple-flip.

//...

//}

//else

//returnfalse;文档注释(即Javadoc)

Javadoc是一种工具,它使用以/**开头和以*/结束的注释从Java代码生成HTML文档,有关Javadoc的工作方式或阅读全文,请参阅Wikipedia。

这是一个Javadoc示例

*ReturnsanImageobjectthatcanthenbepaintedonthescreen.

*Theurlargumentmustspecifyanabsolute{@linkURL}.Thename

*argumentisaspecifierthatisrelativetotheurlargument.

*Thismethodalwaysreturnsimmediately,whetherornotthe

*imageexists.Whenthisappletattemptstodrawtheimageon

*thescreen,thedatawillbeloaded.Thegraphicsprimitives

*thatdrawtheimagewillincrementallypaintonthescreen.

*@paramurlanabsoluteURLgivingthebaselocationoftheimage

*@paramnamethelocationoftheimage,relativetotheurlargument

*@returntheimageatthespecifiedURL

*@seeImage

publicImagegetImage(URLurl,Stringname){

try{

returngetImage(newURL(url,name));

}catch(MalformedURLExceptione){

returnnull;

当对具有以上代码的代码运行javadoc时,以上代码将导致HTML如下所示

>Seehereformore

这是一些关键标记,可用于增强生成的Java文档的质量。

@author=>@authorRaf

@code=>{@codeAC}

@deprecated=>@deprecateddeprecation-message

@exception=>@exceptionIOExceptionthrownwhen

@link=>{@linkpackage.class#memberlabel}

@param=>@paramparameter-namedescription

@return=>Whatthemethodreturns

@see=>@see"string"OR@see

@since=>Toindicatetheversionwhenapubliclyaccessiblemethodisadded

有关完整列表和更详细的说明,请参见

oracle/technetwork/java/javase/tech/index-137868.html

Twitter的编码标准建议不要使用@author标签

代码可以在其生命周期内无数次换手,并且源文件的原始作者在经过多次迭代后常常是无关紧要的。我们发现最好信任提交历史记录和OWNERS文件来确定代码主体的所有权。

以下示例说明了如何按照Twitter的编码标准中的描述撰写有见地的文档注释

//Bad.

*Splitsastring.

*@paramsAstring.

*@returnAlistofstrings.

Listsplit(Strings);

//Better.

//-Weknowwhatthemethodsplitson.

//-Stillsomeundefinedbehavior.

*Splitsastringonwhitespace.

*@paramsThestringtosplit.An{@codenull}stringistreatedasanemptystring.

*@returnAlistofthewhitespace-delimitedpartsoftheinput.

//Great.

//-Coversyetanotheredgecase.

*Splitsastringonwhitespace.Repeatedwhitespacecharacters

*arecollapsed.

写注释时专业很重要的

userId=Integer.parseInt(xml.getField("id"));

}catch(NumberFormatExceptione){

//TODO(Jim):Tuckfieldvalidationawayinalibrary.

而且重要的是要记住,除非实现已更改,否则不要记录重写的方法。

还有几点需要牢记

·覆盖时始终使用@Override注解

·鼓励在字段或方法返回null时使用@Nullable

//FIXME(Raf):Anactionablemessagedescribewhatneedstobedone

//TODO(Raf):Anactionablemessagedescribewhatneedstobedone

最终的目的是编写使将来的作者和维护者的生活变得轻松的代码。

THE END
1.JAVA计算机毕业设计书籍点评网站(附源码数据库)JAVA + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 https://blog.csdn.net/zhuoyuebysj/article/details/144426861
2.Java优势在哪里体现编程语言Java是一种广泛应用的编程语言,其优势主要体现在以下几个方面: 跨平台性 Java的最大优势在于其跨平台性,即“一次编写,到处运行”的理念。Java程序编译成字节码后,这些字节码便能在任何安装了Java虚拟机(JVM)的设备上运行,从而大大简化了开发过程并提高了代码的可移植性。 https://www.yisu.com/jc/930741.html
3.javabrary最佳评论javalibrary最高评javabrary最佳评论 javalibrary最高评 原作者:Henn Idan 一年的时间就这么匆匆过去了,就好像像我们昨天才刚刚从GitHub上分析了2016年的Top Java类库一样。今年,我们在数据检索方面采用了Google的BigQuery,来得到更精确的结果。 译者注:BigQuery 是 Google 专门面向数据分析需求设计的一种全面托管的 PB 级低成本企业https://blog.51cto.com/u_16099221/6821134
4.JavaClassLibrary短评读过 在读 想读 我来写短评 热门 还没人写过短评呢 << 首页 < 前页 后页> > Java Class Library 作者: Miller, Frederic P.; Vandome, Agnes F.; McBrewster, John 页数: 68 isbn: 6131626022 书名: Java Class Library? 2005-2024 douban.com, all rights reserved 北京豆网科技有限公司 https://book.douban.com/subject/19157236/comments
5.嘘偷偷告诉你JavaLibrary最新版本号的藏身之处嘿嘿,是不是又在满世界找Java Library的最新版本号?别急,今儿个哥儿们就带你探探这神秘的地界。 “版本号,你躲哪儿去了?” 话说这版本号啊,它就跟那顽皮的孩子似的,最爱跟你玩捉迷藏。你说你找它容易吗?它偏不,非得让你满头大汗、焦急万分。 http://m.omtfs.com/fszx/4176041c93.html
6.javalibrary为了这个她一个月学习了42种编程语言:Ada、汇编、BASIC、C、C?、C++、COBOL、CSS、D、FORTH、FORTRAN、Go、Haskell、HTML、Java、JavaScript、Julia、JSON、Kotlin、ld、LISP、Lua 全文 42 评论 55 蚁工厂 11-15 12:41 来自 微博网页版 SQL Style Guide网页链接小册子,为SQL代码编写提供一套统一的规范https://m.weibo.cn/search?containerid=100103&q=javalibrary
7.天津教育最好的三个区天津哪个区适合居住教育又好?·帕克的经典1984之我要变 彗星社2024年泡面番 蘑菇视频红色logo纯黑色背景 JAVAlibrary影片类别 5g影响5g天天绿色 undefined blackpinkmv高清图片 47417大但人文艺术作品 樱花动漫immionne官网无暗牧 荧的惩罚游戏v1.0汉化版优势 2对1初次体检3星辰 胡桃给旅行者特殊的奖励视频 桥矿影视超棒第24集 班长用她的玉足白http://www.ericsson365.com/article.php/www.ericsson365.com/article.php/n918-77.xhtml
8.GitHubkylingood/GitHubChineseTopLuckSiege/PictureSelector Picture Selector Library for Android or 图片选择器 7.7k Java 12/07 127daniulive/SmarterStreaming 国内外为数不多致力于极致体验的超强全自研跨平台(windows/android/iOS)流媒体内核,通过模块化自由组合,支持实时RTMP推流、RTSP推流、RTMP播放器、RTSP播放器、录像、多路流媒体转发、音https://github.com/kylingood/GitHub-Chinese-Top-Charts
9.C++注册码获取方法(HowtogetC++registrationcode)21xrx.com总而言之,获得 C++ 注册码的方法其实是很简单的。只需要购买许可证并按照它的要求进行激活即可。如果你是一位学生或教育工作者,记得询问你所属学校的 C++ 许可证相关政策,你可以更加高效的获得免费或廉价的 C++ 许可证。 上一篇: idea打包java可执行jar包 下一篇: C++ 如何调用 sin 函数 评论区 发表相似https://21xrx.com/Articles/read_article/133474
10.m.prurl.cn/kainiu/37108741.htmJAVAlibrary最受欢迎的网站 情窦初开的少女怕他来又怕他不来 风车动漫(p)-专注动漫的门户网站 185和158进不去怎么办 99热九九这里只有精品10 欧洲尺码日本尺码专线不卡顿 Adobe Acrobat手机版 美妇岳妇的肉泬目录 欧美疯狂性受XXXXX羞涩Av 沦为全班便器的班长男男小说 贾樟柯《风流一代》电影 和http://m.prurl.cn/kainiu/37108741.htm
11.编写AndroidLibrary的最佳实践1加上之后我们可以编译一次 aar,打开看一下,会发现里面多了一个proguard.txt文件,一旦你的库被依赖,Gradle 会把这个规则与app模块的Proguard 配置文件合并后一起运行混淆,这样一来引用你 library 的人就再也不用担心混淆配置的问题了,因为你已经完全帮他做好。 https://xie.infoq.cn/article/ab9277d9cad84de8c75db52d7
12.javlibrary最新地址,JavLibrary最新地址,探索与体验随着技术的不断进步和更新,Java开发者的需求也在日益增长,作为Java开发者的知识宝库,JavLibrary提供了丰富的资源和信息,帮助开发者提升技能、了解最新趋势和最佳实践,本文将介绍JavLibrary的最新地址,并探索其提供的各种功能和资源。 JavLibrary的新地址 让我们从JavLibrary的新地址开始,随着网站的发展和升级,JavLibrary已https://www.yndeshang.com/post/699.html
13.最佳教程第123页只需10分钟即可在Deep Java Library中使用Spark进行深度学习 - Qing Lan 20-06-12380410K Apache Spark是一种广泛使用的数据处理技术,并且被机器学习用户大量使用。Spark可用于对产品进行分类,预测需求并个性化建议。尽管Spark支持多种编程语言,但首选的Spark SDK是为S. https://www.jdon.com/threadDigSortedList/3660
14.GRADLE构建最佳实践构建初始化的很多工作是关于java虚拟机的启动,加载虚拟机环境,加载class文件等,如果这些动作交给一个单独的后台进程去做,那么,第一次初始化之后的修改代码再构建是不是可以节省很多时间呢?答案是肯定的,通过在gradle.properties加入这样一句来开启,如果想让修改全局所有项目都生效,那么修改这个文件~/.gradle/gradle.propehttps://www.jianshu.com/p/c12f8e70d452
15.最佳Android应用程序开发工具(IDE)Eclipse Foundation公司开发的eclipse是一种免费的开源IDE,用于以Java和其他编程语言开发应用程序。 Eclipse是仅次于用于Android应用程序开发的Android Studio的第二大最受欢迎的IDE。 Eclipse Android具有广泛的社区支持,并且众多插件和配置的可用性使在Eclipse IDE中的开发更加容易。 https://www.isolves.com/it/cxkf/ydd/Android/2020-08-18/28743.html
16.1Oracle最佳安全配置.pdfOracle 最佳安全配置 - 1 - ? 2020 安华金和 ■ 版权声明 本文中出现的任何文字叙述、文档格式、插图、照片、方法、过程等内容,除另有特别注明,版权均属安 华金和所有,受到有关产权及版权法保护。任何个人、机构未经安华金和的书面授权许可,不得以任何方 式复制或引用本文的任何片断。 目录 ORACLE 最佳安全配置https://max.book118.com/html/2021/1201/7113010001004055.shtm
17.美团点评对于网站性能优化的经验总结网站优化网站运营因此有必要对案例做一些简化,确保相关取值范围得到满足。基于以上以及其他原因,作者所给出的解决方案只是可行性方案,并不保证其是所碰到问题的最佳解决方案。 案例涉及的所有项目都是基于Java语言开发的,严格地讲,所有模式适用的场景是基于Java语言搭建的服务。从另外一方面讲,Java和C++的主要区别在于垃圾回收机制,所以,https://www.jb51.net/yunying/443251.html
18.KubeSphere最佳实战:59张高清大图,带你实战入门KubeSphereDev2024 年云原生运维实战文档 99 篇原创计划第 047 篇|KubeSphere 最佳实战「2024」系列第 019 篇 你好,欢迎来到运维有术。 KubeSphere 基于Jenkins的DevOps系统是专为Kubernetes中的 CI/CD 工作流设计的,它提供了一站式的解决方案,帮助开发和运维团队用非常简单的方式构建、测试和发布应用到 Kubernetes。它还具有插件https://cloud.tencent.com.cn/developer/article/2444454
19.TesseractNativelibrary(linux-x86-64/libtesseract.so)notfoundinresource path([jar:file:/blog-server.jar!/BOOT-INF/classes!/, java.lang.UnsatisfiedLinkError:Errorloading shared library liblept.so.5:Nosuch fileordirectory(neededby/root/.cache/JNA/temp/jna4202543007498402592.tmp) http://masikkk.com/article/Tesseract/
20.如何实现直播评论嘲中顶部渐变遮罩效果方舟UI框架(ArkUI)synchronized在java中可以修饰方法,从而简单地实现函数的同步调用。在系统ets开发中,如何简单实现该功能 ArkTS类的方法是否支持重载 如何将类Java语言的线程模型(内存共享)的实现方式转换成在ArkTS的线程模型下(内存隔离)的实现方式 以libstd为例,C++的标准库放在哪里了,有没有打到hap包中 如何开启AOT编译模式https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-343-V5
21.最佳46款免费软件(同步精译版)善用佳软[2] http://www.javacoolsoftware.com/spywareblaster.html 免费软件,任意 Windows 版本,2.5MB[3] http://www.javacoolsoftware.com/spywareguard.html 免费软件,任意 Windows 版本,913KB 5 最佳免费防火墙 更新:2008-02-10 译者:xbeta 从没有哪类软件,给普通用户在安装和每天的使用中带来如此多不安,甚至不便https://www.newsmth.net/bbsanc.php?path=/groups/comp.faq/NewSoftware/SoftIntro/M.1209343283.s0&ap=126060
22.javlibrary最新地址,JavLibrary最新地址及其资源深度解析1、官方文档与教程:JavLibrary提供了丰富的官方文档和教程,涵盖了Java编程的各个方面,开发者可以通过查阅文档和教程,了解Java最新特性、技术趋势以及最佳实践。 2、工具和插件:JavLibrary为开发者提供了众多实用的工具和插件,如代码编辑器、调试工具、集成开发环境(IDE)插件等,这些工具和插件有助于提高开发者的编程效率https://jzshjs.cn/post/710.html