如何评价阿里近期发布的Java阿里编码规范范

「阿里巴巴编码规范」认证考试出炉!你考过了吗?a month ago48收藏分享举报文章被以下专栏收录云生态下的人才创新工厂,汇集阿里技术精粹-推荐阅读{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&阿里云大学,致力于建设从IT时代向DT时代转型过程中在云计算、大数据、人工智能、云安全等领域的一所创新人才工厂。通过线上培训、云计算大数据专业认证、优质的阿里云产品沙箱实验及校企合作、创新人才中心等多种方式,打造从学、到练、到赛、到考、到就业与创业的创新型人才培养的全方位闭环生态链。&,&permission&:&COLUMN_PUBLIC&,&memberId&:,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&云生态下的人才创新工厂,http:\u002F\&,&urlToken&:&aliyunedu&,&id&:34606,&imagePath&:&v2-0b0e95f2bdca071f665a.jpg&,&slug&:&aliyunedu&,&applyReason&:&0&,&name&:&阿里云大学&,&title&:&阿里云大学&,&url&:&https:\u002F\\u002Faliyunedu&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:7438,&avatar&:{&id&:&v2-0b0e95f2bdca071f665a&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\\u002Fv2-0b0e95f2bdca071f665a_l.jpg&,&articlesCount&:51},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\\u002Fv2-7c2e79f77b78787ccb69c_r.jpg&,&lastUpdated&:,&imagePath&:&v2-7c2e79f77b78787ccb69c.jpg&,&permission&:&ARTICLE_PUBLIC&,&topics&:[,3307],&summary&:&无规矩不成方圆,无规范不能协作。近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了高含金量的《阿里巴巴Java开发手册》,并向业界开放。该手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MYSQL规约、工程规…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&censor&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T09:50:21+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:3958940,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&「阿里巴巴编码规范」认证考试出炉!你考过了吗?&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_NEED_REVIEW_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:0,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\\u002Fv2-7c2e79f77b78787ccb69c_r.jpg&,&author&:{&bio&:&阿里云大学课程运营&,&isFollowing&:false,&hash&:&bd53ed80abcfa1636db4&,&uid&:803300,&isOrg&:false,&slug&:&a-li-yun-da-xue&,&isFollowed&:false,&description&:&&,&name&:&云大学小编&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fa-li-yun-da-xue&,&avatar&:{&id&:&v2-781dd50f31abdaeee895bb5&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:823456},{&sourceColumn&:{&lastUpdated&:,&description&:&&,&permission&:&COLUMN_PUBLIC&,&memberId&:,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&汇集阿里技术精粹-&,&urlToken&:&yunqichengxuyuan&,&id&:29437,&imagePath&:&v2-f41c4ececa862f50bdaa851db41c3f54.jpg&,&slug&:&yunqichengxuyuan&,&applyReason&:&0&,&name&:&我是程序员&,&title&:&我是程序员&,&url&:&https:\u002F\\u002Fyunqichengxuyuan&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:10458,&avatar&:{&id&:&v2-f41c4ececa862f50bdaa851db41c3f54&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\\u002Fv2-f41c4ececa862f50bdaa851db41c3f54_l.jpg&,&articlesCount&:376},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\\u002Fv2-7c2e79f77b78787ccb69c_r.jpg&,&lastUpdated&:,&imagePath&:&v2-7c2e79f77b78787ccb69c.jpg&,&permission&:&ARTICLE_PUBLIC&,&topics&:[,3307],&summary&:&无规矩不成方圆,无规范不能协作。近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了高含金量的《阿里巴巴Java开发手册》,并向业界开放。该手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MYSQL规约、工程规…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&censor&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T09:50:21+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:3958940,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&「阿里巴巴编码规范」认证考试出炉!你考过了吗?&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_NEED_REVIEW_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:0,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\\u002Fv2-7c2e79f77b78787ccb69c_r.jpg&,&author&:{&bio&:&阿里云大学课程运营&,&isFollowing&:false,&hash&:&bd53ed80abcfa1636db4&,&uid&:803300,&isOrg&:false,&slug&:&a-li-yun-da-xue&,&isFollowed&:false,&description&:&&,&name&:&云大学小编&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fa-li-yun-da-xue&,&avatar&:{&id&:&v2-781dd50f31abdaeee895bb5&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:823460}],&title&:&「阿里巴巴编码规范」认证考试出炉!你考过了吗?&,&author&:&a-li-yun-da-xue&,&content&:&\u003Cp\u003E无规矩不成方圆,无规范不能协作。近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了高含金量的《阿里巴巴Java开发手册》,并向业界开放。\u003C\u002Fp\u003E\u003Cp\u003E该手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MYSQL规约、工程规约、安全规约五大块,再根据内容特征,细分成若干二级子目录。根据约束力强弱和故障敏感性,规约依次分为强制、推荐、参考三大类。此套规范不仅能让代码一目了然,更有助于加强团队分工与合作、真正提升效率。 \u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E「阿里巴巴编码规范」认证\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E阿里云大学携手手册项目组,推出「阿里巴巴编码规范」认证,通过50道题目,来检测你的编码习惯与《阿里巴巴Java开发手册》有哪些异同之处。考试通过还将发放阿里云大学官方认证——「阿里巴巴编码规范」。学习、考试、认证一体,展示你的编码水平与风格。\u003C\u002Fp\u003E\u003Cp\u003E学习&认证:\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002Fm\u002F3F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E阿里巴巴编码规范-阿里云大学\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-8e7b737e2a7ddec40b53cb_b.png\& data-rawwidth=\&1000\& data-rawheight=\&667\& class=\&origin_image zh-lightbox-thumb\& width=\&1000\& data-original=\&https:\u002F\\u002Fv2-8e7b737e2a7ddec40b53cb_r.png\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='1000'%20height='667'&&\u002Fsvg&\& data-rawwidth=\&1000\& data-rawheight=\&667\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&1000\& data-original=\&https:\u002F\\u002Fv2-8e7b737e2a7ddec40b53cb_r.png\& data-actualsrc=\&https:\u002F\\u002Fv2-8e7b737e2a7ddec40b53cb_b.png\&\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E知乎话题:\u003Ca href=\&https:\u002F\\u002Fquestion\u002F\& class=\&internal\&\u003E如何评价阿里近期发布的Java编码规范?\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-30deaade70f9a3632778_b.jpg\& data-rawwidth=\&595\& data-rawheight=\&842\& class=\&origin_image zh-lightbox-thumb\& width=\&595\& data-original=\&https:\u002F\\u002Fv2-30deaade70f9a3632778_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='595'%20height='842'&&\u002Fsvg&\& data-rawwidth=\&595\& data-rawheight=\&842\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&595\& data-original=\&https:\u002F\\u002Fv2-30deaade70f9a3632778_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-30deaade70f9a3632778_b.jpg\&\u003E\u003Cp\u003E\u003C\u002Fp\u003E&,&updated&:new Date(&T01:50:21.000Z&),&canComment&:false,&commentPermission&:&review&,&commentCount&:11,&collapsedCount&:0,&likeCount&:48,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002Fv2-7c2e79f77b78787ccb69c_r.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Java&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&编程规范&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&阿里云&}],&adminClosedComment&:false,&titleImageSize&:{&width&:800,&height&:432},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&tipjarState&:&inactivated&,&annotationAction&:[],&sourceUrl&:&&,&pageCommentsCount&:11,&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T09:50:21+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:null,&isFollowing&:false,&hash&:&b2da836d6c2cab54bbc5da&,&uid&:118500,&isOrg&:false,&slug&:&ge-ge-97-13&,&isFollowed&:false,&description&:&&,&name&:&哈卅给&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fge-ge-97-13&,&avatar&:{&id&:&v2-d1f3e9a3c24bcb89ef1f9&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&程序员&,&isFollowing&:false,&hash&:&879ac4cebae40ba455a0a6&,&uid&:241300,&isOrg&:false,&slug&:&tu-tu-80-53-8&,&isFollowed&:false,&description&:&&,&name&:&图图&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Ftu-tu-80-53-8&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&跌落悬崖 捡到秘籍 《Java入门到放弃》正在等死&,&isFollowing&:false,&hash&:&9b17b25f4caa335a58075f&,&uid&:467300,&isOrg&:false,&slug&:&jt-li-16&,&isFollowed&:false,&description&:&&,&name&:&JT LI&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fjt-li-16&,&avatar&:{&id&:&v2-518def22f8cb02b6ff69f02&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&java程序员&,&isFollowing&:false,&hash&:&11ee54cc11f61a6b9078bfcdb54fec55&,&uid&:716000,&isOrg&:false,&slug&:&xiu-dou-81&,&isFollowed&:false,&description&:&&,&name&:&秀逗&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fxiu-dou-81&,&avatar&:{&id&:&1fe8cb7c4d654fec0c05&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&喜好古风的Coder&,&isFollowing&:false,&hash&:&3eb560b10c19a55fdebc7c8&,&uid&:643460,&isOrg&:false,&slug&:&chen-song-63-26&,&isFollowed&:false,&description&:&大学生在读中&,&name&:&Squirrel Chen&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fchen-song-63-26&,&avatar&:{&id&:&5dfa3eeb9ed4c93789f0b&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&\u003Cimg src=\&http:\u002F\\u002Fv2-8e7b737e2a7ddec40b53cb_200x112.png\& data-rawwidth=\&1000\& data-rawheight=\&667\& class=\&origin_image inline-img zh-lightbox-thumb\& data-original=\&http:\u002F\\u002Fv2-8e7b737e2a7ddec40b53cb_r.png\&\u003E无规矩不成方圆,无规范不能协作。近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了高含金量的《阿里巴巴Java开发手册》,并向业界开放。该手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MYSQL规约、工程规…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&annotationDetail&:null,&commentsCount&:11,&likesCount&:48,&FULLINFO&:true}},&User&:{&a-li-yun-da-xue&:{&isFollowed&:false,&name&:&云大学小编&,&headline&:&&,&avatarUrl&:&https:\u002F\\u002F50\u002Fv2-781dd50f31abdaeee895bb5_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&a-li-yun-da-xue&,&bio&:&阿里云大学课程运营&,&hash&:&bd53ed80abcfa1636db4&,&uid&:803300,&isOrg&:false,&description&:&&,&badge&:{&identity&:null,&bestAnswerer&:null},&profileUrl&:&https:\u002F\\u002Fpeople\u002Fa-li-yun-da-xue&,&avatar&:{&id&:&v2-781dd50f31abdaeee895bb5&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}},&Comment&:{},&favlists&:{}},&me&:{},&global&:{&experimentFeatures&:{&ge3&:&ge3_9&,&ge2&:&ge2_1&,&nwebStickySidebar&:&sticky&,&newMore&:&new&,&liveReviewBuyBar&:&live_review_buy_bar_2&,&liveStore&:&ls_a2_b2_c1_f2&,&isOffice&:&false&,&homeUi2&:&default&,&answerRelatedReadings&:&qa_recommend_with_ads_and_article&,&remixOneKeyPlayButton&:&headerButton&,&asdfadsf&:&asdfad&,&qrcodeLogin&:&qrcode&,&newBuyBar&:&livenewbuy3&,&isShowUnicomFreeEntry&:&unicom_free_entry_off&,&newMobileColumnAppheader&:&new_header&,&zcmLighting&:&zcm&,&favAct&:&default&,&appStoreRateDialog&:&close&,&mobileQaPageProxyHeifetz&:&m_qa_page_nweb&,&iOSNewestVersion&:&4.2.0&,&default&:&None&,&wechatShareModal&:&wechat_share_modal_show&,&qaStickySidebar&:&sticky_sidebar&,&androidProfilePanel&:&panel_b&,&nwebWriteAnswer&:&experiment&}},&columns&:{&next&:{}},&columnPosts&:{},&columnSettings&:{&colomnAuthor&:[],&uploadAvatarDetails&:&&,&contributeRequests&:[],&contributeRequestsTotalCount&:0,&inviteAuthor&:&&},&postComments&:{},&postReviewComments&:{&comments&:[],&newComments&:[],&hasMore&:true},&favlistsByUser&:{},&favlistRelations&:{},&promotions&:{},&draft&:{&titleImage&:&&,&titleImageSize&:{},&isTitleImageFullScreen&:false,&canTitleImageFullScreen&:false,&title&:&&,&titleImageUploading&:false,&error&:&&,&content&:&&,&draftLoading&:false,&globalLoading&:false,&pendingVideo&:{&resource&:null,&error&:null}},&drafts&:{&draftsList&:[],&next&:{}},&config&:{&userNotBindPhoneTipString&:{}},&recommendPosts&:{&articleRecommendations&:[],&columnRecommendations&:[]},&env&:{&edition&:{},&isAppView&:false,&appViewConfig&:{&content_padding_top&:128,&content_padding_bottom&:56,&content_padding_left&:16,&content_padding_right&:16,&title_font_size&:22,&body_font_size&:16,&is_dark_theme&:false,&can_auto_load_image&:true,&app_info&:&OS=iOS&},&isApp&:false},&message&:{&newCount&:0},&pushNotification&:{&newCount&:0}}如何评价阿里近期发布的Java编码规范? - 知乎4844被浏览503036分享邀请回答0添加评论分享收藏感谢收起如何评价阿里近期发布的Java编码规范? - 知乎4844被浏览503036分享邀请回答199 条评论分享收藏感谢收起正所谓脑袋空空,口袋空空,坚持每天学一点东西,坚持每天记录所见所学 :P
这两天耐着性子把《阿里JAVA编码规范》看完了,觉得收获良多,先记载下自己的学习笔记,等抽空了再尝试把里面的内容结构化一下方便以后速查,惯例先放出下载地址,大公司做事情都比较有始有终,即使是编码规范文档,也是本着经营产品的心态去维护的,这份规范阿里巴巴有不断地迭代更新,大家可以到云栖论坛下载最新的版本查看。
阿里JAVA编码规范.PDF
云栖论坛:
治其人而不知其所以然是不行滴,在了解规范的同时,也需要了解具体的含义:
Note one:
【推荐】如果使用到了设计模式,建议在类名中体现出具体模式。 说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。 正例:public class OrderF public class LoginP public class ResourceO
设计模式延伸阅读:
Note two:
【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。 正例:接口方法签名:void f(); 接口基础常量表示:String COMPANY = “alibaba”; 反例:接口方法定义:public abstract void f(); 说明:JDK8中接口允许有默认实现,那么这个default方法,是对所有实现类都有价值的默认实现。
让我真真切切地感受到看懂字节码的重要性…这里提到了Lambda表达式和JDK类库之间的桥梁 – Default方法, 同样引用别人的专业解答:
Lamba(JDK8 引入),不得不说,lamba一定程度上是简化了代码的表达,可是…可是…私以为可读性有点差,是因为我还不熟悉?lamba省去了一些必要的程序说明,对于跳跃性思维不敏感的我来说简直是灾难:
Default 方法(JDK8 引入):
Note three
2) 【推荐】 如果是形容能力的接口名称,取对应的形容词做接口名(通常是–able的形式)。 正例:AbstractTranslator实现 Translatable。
这里是个存疑点..为什么要加Abstract(黑人问号!)? 那它到底是一个抽象类,还是一个具体的实现类,这里表达的意思貌似是实现类? 那Abstract就加得匪夷所思了。
【强制】不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。 反例: String key=”Id#taobao_”+tradeId; cache.put(key, value);
受教了…原来魔法值是指未经定义的变量…
【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。 1) 跨应用共享常量:放置在二方库中,通常是client.jar中的constant目录下。 2) 应用内共享常量:放置在一方库的modules中的constant目录下。 反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义 了表示“是”的变量: 类A中:public static final String YES = “yes”; 类B中:public static final String YES = “y”; A.YES.equals(B.YES),预期是true,但实际返回为false,导致产生线上问题。
阿里巴巴 Java 开发手册
——禁止用于商业用途,违者必究—— 4 / 34
3) 子工程内部共享常量:即在当前子工程的constant目录下。 4) 包内共享常量:即在当前包下单独的constant目录下。 5) 类内共享常量:直接在类内部private static final定义。
一方库,二方库,三方库的定义,让我邪恶地想起了一库….:
【强制】相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。 说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程) 正例:public User getUsers(String type, Integer… ids)
之前不知道,严格遵守就是了,best practice嘛
Note seven
【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。 说明:对于Integer var=?在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。
看了很多次,还是会忘记,记录下来以备查看
Note eight
【强制】关于基本数据类型与包装数据类型的使用标准如下: 1) 所有的POJO类属性必须使用包装数据类型。 2) RPC方法的返回值和参数必须使用包装数据类型。 3) 所有的局部变量【推荐】使用基本数据类型。 说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE问题,或者入库检查,都由使用者来保证。
以前POJO类的属性老是用基本类型,看来用封装类才是正解,有时候做接口什么的,真的不需要过度地为使用者处理NPE这类问题。
【强制】构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。
居然是强制的,受教了。
【强制】POJO类必须写toString方法。使用IDE的中工具:source& generate toString时,如果继承了另一个POJO类,注意在前面加一下super.toString。 说明:在方法执行抛出异常时,可以直接调用POJO的toString()方法打印其属性值,便于排查问题。
以前处理异常的时候只是简单地抛出异常信息,以后会注意把相关的POJO打印一下。
Note eleven
【推荐】慎用Object的clone方法来拷贝对象。 说明:对象的clone方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝。
这里就涉及到浅拷贝和深拷贝的概念,继续引用别人的帖子科普:
Note twelve
【强制】 ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常:java.util.RandomAccessSubList cannot be cast to java.util.ArrayL 说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList ,而是 ArrayList 的一个视图,对于SubList子列表的所有操作最终会反映到原列表上。
【强制】 在subList场景中,高度注意对原集合元素个数的修改,会导致子列表的遍历、增加、删除均产生ConcurrentModificationException 异常。
这里要划重点,省得以后犯错。 对于SubList子列表的所有操作最终会反映到原列表上!
Note thirteen
【强制】使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,大小就是list.size()。 反例:直接使用toArray无参方法存在问题,此方法返回值只能是Object[]类,若强转其它类型数组将出现ClassCastException错误。 正例:
List list = new ArrayList(2);
list.add(“guan”);
list.add(“bao”);
String[] array = new String[list.size()];
array = list.toArray(array);
说明:使用toArray带参方法,入参分配的数组空间不够大时,toArray方法内部将重新分配内存空间,并返回新数组地址;如果数组元素大于实际所需,下标为[ list.size() ]的数组元素将被置为null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素个数一致。
验证一下,确有此事:
Note fourteen
【强制】使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。 说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。 String[] str = new String[] { “a”, “b” }; List list = Arrays.asList(str); 第一种情况:list.add(“c”); 运行时异常。 第二种情况:str[0]= “gujin”; 那么list.get(0)也会随之修改。
划重点,这里留个TODO吧,以后要看下源码,不能人云亦云。
Note fifteen
【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。 反例:
List a = new ArrayList();
a.add(“1”);
a.add(“2”);
for (String temp : a) {
if(“1”.equals(temp)){
a.remove(temp);
说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的结果吗? 正例:
Iterator it = a.iterator();
while(it.hasNext()){
String temp = it.next();
if(删除元素的条件){
it.remove();
试了下反例:
private static void checkRemoveItemInForeach() {
List&String& a = new ArrayList&String&();
a.add("1");
a.add("2");
System.out.println(a.toString());
for (String temp : a) {
if ("2".equals(temp)) {
a.remove(temp);
System.out.println(a.toString());
条件是”1”.equals(temp)的事后没问题,但是改成”2”.equals(temp)之后就报如下错了,真是不试不知道,一试吓一跳
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at ValidationDemo.checkRemoveItemInForeach(ValidationDemo.java:34)
at ValidationDemo.main(ValidationDemo.java:7)
查了一下原因,网上有高手研究出来的结果
Note sixteen
【强制】 在JDK7版本以上,Comparator要满足自反性,传递性,对称性,不然Arrays.sort,Collections.sort会报IllegalArgumentException异常。 说明: 1) 自反性:x,y的比较结果和y,x的比较结果相反。 2) 传递性:x&y,y&z,则x&z。 3) 对称性:x=y,则x,z比较结果和y,z比较结果相同。 反例:下例中没有处理相等的情况,实际使用中可能会出现异常:
new Comparator() {
public int compare(Student o1, Student o2) {
return o1.getId() & o2.getId() ? 1 : -1;
Comparator用得少,记一下
Note seventeen
【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。 正例:
public class TimerTaskThread extends Thread {
public TimerTaskThread(){
super.setName(“TimerTaskThread”); …
一般都忘记给线程起名字,每次起名字都很头疼
Note eighteen
【强制】SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。 正例:注意线程安全,使用DateUtils。亦推荐如下处理:
private static final ThreadLocal df = new ThreadLocal() {
protected DateFormat initialValue() {
return new SimpleDateFormat(“yyyy-MM-dd”);
说明:如果是JDK8的应用,可以使用Instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替Simpledateformatter,官方给出的解释:simple beautiful strong immutable thread-safe。
SimpleDateFormat的多并发适应性欠缺,幸好jdk8有救星
Note nineteen
【强制】并发修改同一记录时,避免更新丢失,要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,使用version作为更新依据。 说明:如果每次访问冲突概率小于20%,推荐使用乐观锁,否则使用悲观锁。乐观锁的重试次数不得小于3次。
同样的给我科普了一下乐观锁和悲观锁的定义,引用高手的解析
Note twenty
【强制】多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。
阿里巴巴 Java 开发手册
【推荐】使用CountDownLatch进行异步转同步操作,每个线程退出前必须调用countDown方法,线程执行代码注意catch异常,确保countDown方法可以执行,避免主线程无法执行至countDown方法,直到超时才返回结果。 说明:注意,子线程抛出异常堆栈,不能在主线程try-catch到。
划重点,不熟悉,所以记一下,以后详细研究
【推荐】避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed 导致的性能下降。
说明:Random实例包括java.util.Random 的实例或者 Math.random()实例。 正例:在JDK7之后,可以直接使用API ThreadLocalRandom,在 JDK7之前,可以做到每个线程一个实例。
在JDK7之后,可以直接使用API ThreadLocalRandom,嗯嗯,记就是了。
【推荐】代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。 说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。
这让我想起了测试用例的恐惧,有时候工具是好,只是需要在适当的时候适当地用。
【参考】好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。 反例:
// put elephant into fridge
put(elephant, fridge);
方法名put,加上两个有意义的变量名elephant和fridge,已经说明了这是在干什么,语义清晰的代码不需要额外的注释。
我个人是非常认同第一句话的,看了《代码简洁之道》之后,我也努力地尝试着把方法名和变量名变得通俗易懂。
*好吧,先记到这里,太多了,明天再补,接着要研究在线修复bug的相关技术,fight!*
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1016次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'}

我要回帖

更多关于 阿里编码规范word 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信