java java编码

在Oracle网站上有Java编程语言的官方代码约定指南。 您可能希望这份超过20页的文档将是有关Java语言的最佳实践,提示和技巧的最完整,最全面和最权威的来源。 但是一旦您开始阅读它,失望和沮丧和愤怒就会增加。 我想指出本指南中最明显的错误,错误做法,不良和过时的建议。 如果您是Java的初学者,只需不用学习本教程,而是寻找更好,最新的参考资料。 让恐怖开始吧! 2.2通用文件名

GNUmakefile生成文件的首选名称。 我们使用gnumake来构建我们的软件。 gnumake建立Java项目? 蚂蚁被认为是老派, 行家也被认为是老派。 谁使用make来构建WAR,JAR,生成JavaDoc ...? 3.1.1开头注释所有源文件都应以c样式注释开头,该注释列出了类名称,版本信息,日期和版权声明:将类名称放入注释中以开始文件吗? 如果我改变主意并稍后重命名课程怎么办? 那“ 日期 ”应该代表什么? 有人使用各种占位符通过版本控制系统自动插入文件的最后修改时间。 好吧,VCS可以告诉您文件的创建时间或上次修改时间-一次又一次地修改同一行会使合并变得非常痛苦。 4 –缩进应使用四个空格作为缩进单位。 缩进的确切构造(空格与制表符)未指定。 制表符必须每8个空格(而不是4个)正确设置。 可能是文档中最违反直觉的部分。 有些人喜欢空格,其他人(包括我)则喜欢制表符。 品味和团队安排有关。 但是本指南建议同时使用两者,有时用制表符替换空格。 这是“ 未指定 ”。 我的建议:使用选项卡,并让每个开发人员将其IDE配置为具有所需的大小凹痕。

4.1线长

避免使用超过80个字符的行,因为许多终端和工具无法很好地处理它们。

80个字符? 我的笔记本电脑可以轻松容纳三倍。 在一行中争取使用120-140个字符,但不要使用硬包装。 我个人只是显示垂直边距,

行的长度取决于可读性。 顺便说一句,这里是来自各种库和框架的类的几个示例:

  • SQLIntegrityConstraintViolationException (JDK SQLIntegrityConstraintViolationException个字符)
  • AbstractInterruptibleBatchPreparedStatementSetter (Spring框架,50个字符)
  • AbstractDataSourceBasedMultiTenantConnectionProviderImpl (Hibernate,56个字符)
  • PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails (Spring Security,58个字符)

而且我们假设整行可以容纳80个字符吗?

5.1.2单行注释

if (condition) {/* Handle the condition. */...
}

以防万一代码不够自我描述,我建议使用更好的注释:

if (condition) {/* This block is executed if condition == true. */...
}

5.1.3尾随评论

if (a == 2) {return TRUE;            /* special case */
} else {return isPrime(a);      /* works only for odd a */
}

您的意思是(并且即使没有评论也不要告诉我它的可读性较差)?

return a == 2 || isPrime(a);

6.1每行编号

int level; // indentation level
int size;  // size of table

当我们有注释时,为什么要使用描述性变量名! 考虑一下这个:

int indentationLevel;
int tableSize;

在本节的后面部分: 绝对不要在同一行上声明变量和函数。 例:

long dbaddr, getDbaddr(); // WRONG!

当然,这是错误的,甚至无法编译。 我很惊讶没有提到“ 不要在变量名中放置空格 ”是一种好习惯……

6.3放置位置

仅在块的开头放置声明。 […]不要等到第一次使用变量时才声明它; 它会使混乱的程序员感到困惑[…]这是编码约定希望您编写代码的方式:

int min;            //inclusive
int max;            //exclusive
int distance;
List<String> list;  //one per each itemmin = findMin();
max = findMax();
distance = max - min;
list = new ArrayList<>(distance);
//...

这是应该如何编写以避免混淆:

final int minInclusive = findMin();
final int maxExclusive = findMax();
final int distance = maxExclusive - minInclusive;
final List<String> listOfItems = new ArrayList<>(distance);
//...

除此之外,我们最终可以(使用nomen est omen )使用final关键字。 本节后面的代码示例显示了类字段缺少private修饰符(默认为包私有访问)的情况。 包私人领域?

7.3返回声明

return (size ? size : defaultSize);

也许您没有注意到,但是从上下文中我们可以看出sizedefaultSize都是boolean类型。 没错, sizedefaultSize可以为truefalse (!)这是违反直觉的! 从这样的文档中,我不仅期望句法正确性,而且期望有意义的代码和良好实践! 此外,表达可大大简化, 一步一步

size ? size : defaultSize
size ? true : defaultSize
size || defaultSize

7.5声明

空的for语句(其中所有工作均在初始化,条件和更新子句中完成)应具有以下形式:

for (initialization; condition; update);


'
for语句 '? 为什么要使用空的for语句? 这令人困惑 ,应避免,不鼓励在官方语言指南中进行描述。

奖励测验:此代码在C语言中的用途是什么?

while(*dst++ = *src++);

我相信每个计算机程序员都应该理解上面的代码片段。 即使您使用Ruby或TSQL进行编程。

7.8 switch语句

每次遇到case (不包括break语句)时,请在break语句通常所在的位置添加注释。


我了解意图,但做法是错误的。 不要记录意外的和容易出错的代码片段,而要避免它们。 不要依赖失败,根本不要使用它。

8.1空行

在以下情况下,应始终使用一个空白行:

[…]

  • 在方法的局部变量及其第一条语句之间
  • 在块[…]或单行[…]注释之前
  • 一种方法内部的逻辑部分之间,以提高可读性


看来作者建议使用空行来分隔“ 方法逻辑部分 ”。 好吧,我称这些部分为:“ 方法 ”。 不要将语句分组在方法内部的块中,对其进行注释或彼此分开。 而是将它们提取到单独的,命名良好的方法中!

在变量声明和第一个语句之间放置空白行听起来像是从C语言书中摘录的。

8.2空格

  • 除以外的所有二进制运算符. 应该用空格将其操作数分隔开。 空格绝不能将一元运算符(例如一元减号,增量(' ++ ')和减量(' -- '))与其操作数分开。 例:

[…]

while (d++ = s++) {n++;
}

这甚至无法在Java中编译

9 –命名约定 (仅PDF版本 ):

char *cp;

cp是Java中char指针的好名字。 等等, 什么 ? Java中的char 指针

10.1提供对实例和类变量的访问


没有充分的理由就不要公开任何实例或类变量。 真的, 真的是很好的理由! 我曾经使用过public场所吗?

10.4变量赋值

if (c++ = d++) {        // AVOID! (Java disallows)...
}

极好的建议:请避免使用甚至无法在Java中编译的构造。 这使我们的生活变得更加轻松!

10.5.2返回值

if (booleanExpression) {return true;
} else {return false;
}

应该改为

return booleanExpression;

圣牛, 我同意!

摘要

并不是Java编程语言的官方代码约定是完全错误的。 它们只是过时和过时的。 在二十一世纪的第二个十年中,我们拥有了更好的硬件,对代码质量的更深刻理解和更现代的智慧来源 。 代码约定…上一次发布是在1999年,它们受到C语言的极大启发,没有意识到数以百万计的开发人员尚未编写的代码行。 就像设计模式一样,代码约定应该随着时间的流逝而出现,而不是明确给出。 因此,请不要再引用或遵循官方指南的建议。

参考: Java 和社区博客中的JCG合作伙伴 Tomasz Nurkiewicz 认为Java编码约定有害 。

翻译自: https://www.javacodegeeks.com/2012/10/java-coding-conventions-considered-harmful.html

java java编码

java java编码_Java编码约定被认为是有害的相关推荐

  1. java专业编码_java编码中的坑(记一次解决编码BUG的经历) - 贪吃蛇学院-专业IT技术平台...

    1.2016年11月15日(周二),我被经理外派出差渝北金开大道,任务:解决那边的一个数据库乱码异常 2.那边的负责人描述:数据库原是utf8编码,他为了兼容emoji表情,改为utf8mb4,之后出 ...

  2. java 中文编码乱码_Java编码问题复习

    java 中文编码乱码 我最近购买了Anghel Leonard的Java Coding Problems,因为本书中涉及的主题使我成为一名Java培训师很感兴趣. 在这里看到目录后,我决定购买它. ...

  3. Java编码约定被认为是有害的

    在Oracle网站上有Java编程语言指南的正式代码约定 . 您可能希望这份超过20页的文档将是有关Java语言的最佳实践,提示和技巧的最完整,最全面和最权威的来源. 但是一旦你开始阅读它,失望和愤怒 ...

  4. java菱形乱码 编码_JAVA:编码与乱码问题

    一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8 ...

  5. linux java字符集编码_Java字符集编码

    1.  概述 在 下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 65 ...

  6. java urlencode 解码_java.net.URLEncode编码 与 URLDecode解码问题

    网页中的表单使用POST方法提交时,数据内容的类型是 application/x-www-form-urlencoded,这种类型会: 1.字符"a"-"z", ...

  7. java io流学设置编码_Java学习日志(21-2-IO流-基本数据类型与字节数组对象与、编码解码)...

    操作基本数据类型的流对象DataStream /* 可以用于操作基本数据类型数据的流对象 */ import java.io.*; class DataStreamDemo{ public stati ...

  8. java测试字符串的编码_Java字符串测验

    java测试字符串的编码 Welcome to Java String Quiz. String is one of the most important classes in Java. If yo ...

  9. java设置语言编码_Java多语言编码问题解析

    1.Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的"告诉"编译器. 例如:我们的源文件是 ...

最新文章

  1. 深入浅出K-Means算法
  2. PAT 1016 部分A+B
  3. 配置ADO.NET类文件连接优化
  4. 【原生JS插件】LoadingBar页面顶部加载进度条
  5. 在toad新增oracle用户,利用toad发现oracle自动为你干了什么(表空间建立和用户建立)...
  6. 也可以让生命发出耀眼的飞鸽传书光芒
  7. 迷你世界电锯机器人_迷你世界:石像机器人升级版,制作如此简单!
  8. 简记Inception系列
  9. 【面经】回顾19秋招面经
  10. ShenNiu.MVC管理系统
  11. opengl魔方文档_基于OpenGL的3D旋转魔方的实现.doc
  12. sleeptown睡眠时间设置教程(2021)
  13. LayUI中的基本元素之进度条
  14. 原生小程序实现手风琴
  15. 怎么给旧版本ios装旧版本软件
  16. SR-IOV虚拟出来的网卡如何被VPP(DPDK)接管
  17. qq话题怎么引流?QQ空间说说引流技巧,QQ引流有什么好方法?
  18. winform如何修改exe文件的图标
  19. c语言中可以输入中文标点符号,SCIM中 输入中文标点符号的方法
  20. 安装Sourcetree项目开发工具

热门文章

  1. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
  2. MySQL last_insert_id()函数
  3. Oracle入门(十四G)之PL / SQL中检索数据
  4. 【Python】字符串和变量拼接的写法
  5. java中,剩下的这两个内部类不太好理解!
  6. JavaScript对象与事件
  7. 2014年JAVA省赛B组---第四题---大衍数列
  8. 大神开发的模板框架 包括常见的功能
  9. idea创建标准的meaven项目
  10. oracle中闪回和回滚,oracle闪回操作详解