说明:Long a = 2l; 写的是数字的 21,还是 Long 型的 2? 【推荐】不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。 2) 应用内共享常量:放置在一方库中,通常是子模块中的 constant 目录下。 正例:public enum SeasonEnum { SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4); private int seq; SeasonEnum
特殊方法 init和cinit方法:https://stackoverflow.com/questions/8517121/java-what-is-the-difference-between-init-and-clinit 签名多态方法(Signature Polymorphic Methods) MethodHandle(java 7引入),动态确定目标方法,把Method Handle与C/C++中的Function Pointer,或者C#里面的Delegate类比一下 VarHandle(java 9引入) 目标是:https://stackoverflow.com/questions/43558270/correct-way-to-use-varhandle-in-java
注意,本文包含从2020年2月的ECMAScript规范中复制的算法,请以正式规范为准。 我们知道,访问对象的属性需要走查(walk)原型链。 o1有一个叫"foo"的自有属性,因此第2步O.[[GetOwnProperty]]("foo")返回相应的属性描述符,并将其保存在desc中。 属性描述符是一种规范类型。 可以从返回的是o2.x还是o1.x来判断:返回的是o2.x。 我们通过阅读规范就可以预测这段代码的行为! 访问属性时为什么调用[[Get]]? 规范哪里说在访问属性(如o2.foo)时要调用对象的内部方法[[Get]]了?没错,一定在哪个地方规定了。不要别人说什么就信什么! 规范中调用GetValue的地方有好几处,区别在于最后怎么使用这个引用。 ---- 译者附图 上面算法第2步调用?
java编码规范(日常编码总结,规范项目组员有统一的规范,方便合作,查错,重构等)当你抛弃规范随心所意的写代码时,等你之后再回来阅读时真有的一种全部删掉重写的冲动。 本规范最后一部分业务规范仅根据本人所在公司情况制定(游戏开发),请酌情考虑使用。 本project还在完善和验证中,希望和大家一起写出优雅而实用的代码。 正例: 应用工具类包名为 com.java.open.util、类名为 MessageUtils(此规则参考spring 的框架结构) ---- 6. 杜绝完全不规范的缩写,避免望文不知义。 ---- 备注: 以上内容摘自<阿里巴巴JAVA编程规范> ---- 7. 业务规范 1. 【强制】写业务逻辑时,一定要把对应的需求链接贴在代码注释里,方便在和策划撕逼时方便决定谁该背锅。 相关资料 阿里巴巴Java开发手册v1.2.0-1.pdf 阿里巴巴java编程规范2017版.pdf Android & Java 书写简洁规范的代码 https://github.com/xiaomoinfo
Java代码规范 前言 第一章 JAVA语言编程规范总则 第二章 排版规范 第三章 注释规范 第四章 命名规范 第五章 编码规范 第六章 JTEST规范 第七章 安全检查错误 1. (6)合并重复的条件片段 (7)正确使用临时变量(命名规范) 第一章 JAVA语言编程规范总则 本规范总则的示例采用以下的术语描述: ★ 规则:编程时强制必须遵守的原则。 在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在Java语言中括号已经是最清晰的标志了。 if (current_time >= MAX_TIME_VALUE) a = b + c; a *= 2; a = b ^ 2; (3)"!" 命名规范 4.1 规则 4.2 建议 ---- 第五章 编码规范 5.1 规则 5.2建议 ---- 第六章 JTEST规范 6.1 规则(1-2 级) 6.2 建议(3级或以上) ---- 第七章
使用entrySet遍历Map集合KV,而不是keySet方式遍历(keySet方式是遍历了2次,一次转换为Iterator对象,另一次是从hashMap中取出key对应的value,JDK8,使用Map.foreach
Java代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。 如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。 2. 代码格式 用空格字符缩进源代码,不要用tab,每个缩进4个空格。 2.1 源文件编码 源文件使用utf-8编码,结尾用unix n 分格。 2.2 行宽 行宽度不要超过80。 3.2 Java Doc 表明类、域和方法等的意义和用法等的注释,要以javadoc的方式来写。Java Doc是个类的使用者来看的,主要介绍 是什么,怎么用等信息。 凡是类的使用者需要知道,都要用Java Doc 来写。非Java Doc的注释,往往是个代码的维护者看的,着重告述读者为什么这样写,如何修改,注意什么问题等。
所以本文中是笔者结合阿里巴巴开发规范,以及工作中的见闻针对Java领域相关命名进行整理和总结,仅供参考。 [一,Java中的命名规范] 好的命名能体现出代码的特征,含义或者是用途,让阅读者可以根据名称的含义快速厘清程序的脉络。 尽量不要和jdk或者框架中已存在的类重名,也不能使用java中的关键字命名。 妙用介词,如for(可以用同音的4代替), to(可用同音的2代替), from, with,of等。 合理清晰的命名能让代码易于理解,对于逻辑简单且命名规范,能够清楚表达代码功能的代码不需要注解。滥用注解会增加额外的负担,更何况大部分都是废话。 用来解决什么问题 * 对广告主投放的广告落地页进行性能检测,模拟不同的系统,如Android,IOS等; 模拟不同的网络:2G,3G,4G,wifi等 * * 2.
byte[] buffer; 2. Java 注释约定 一个很好的可遵循的有关注释的经验法则是:问问你自己,你如果从未见过这段代码,要在合理的时间内有效地明白这段代码,你需要哪些信息。 Java 文件样式约定 所有的 Java(*.java) 文件都必须遵守如下的样式规则: 1) 版权信息 版权信息必须在 java 文件的开头,比如: /** * Copyright 2016 2) Package/Imports package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。 如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs 一条语句折行后, 应该比原来的语句再缩进2个字符。 n {} 对 {} 中的语句应该单独作为一行。
Java命名规范 定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性。 包的命名 (全部小写,由域名定义) Java包的名字都是由小写单词组成。 但是由于Java面向对象编程的特性,每一名Java程序员都 可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀 例如:MAX_VALUE 参数的命名 参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。 Javadoc注释 Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,也就是我们 所说的Javadoc注释,它是用来记录我们代码中的API的。 变量和常量命名 变量的命名 主要的的命名规范有以下三种: Camel 标记法:首字母是小写的,接下来的单词都以大写字母开头 Pascal 标记法:首字母是大写的,接下来的单词都以大写字母开头
如何更规范化编写Java 代码的重要性想必毋需多言,其中最重要的几点当属提高代码性能、使代码远离Bug、令代码更优雅。 反例: //初始化list,往list 中添加元素反例: int[] arr = new int[]{1,2,3,4}; List<Integer> list = new ArrayList<>(); 会对其进行优化,但是在循环中字符串的拼接Java 编译期无法执行优化,所以需要使用StringBuilder 进行替换。 i; } 正例: //在循环中拼接字符串正例 String str1 = "Love"; String str2 = "Courage"; String strConcat = str1 + str2 需要转译 String[] split2 = "a.ab.abc".split("\\."); System.out.println(Arrays.toString(split2)); // 结果为[
命名规范 类命 驼峰式 MarcoPolo 方法名 localValue 常量 大写单词, 单词间_分割,语义清楚 MAX _ STOCK _ COUNT 抽象类 以Abstract /Base开始, ArrayList 的 subList 结果不可强转成 ArrayList ,否则会抛出 ClassCastException异常,即 java . util . RandomAccessSubList cannot be cast to java . util . ArrayList . 用户请求传入的参数必须进行有效的验证:否则导致1.page size 过大内存溢出 2. 恶意order by 导致数据库查询慢3.任意重定向 4.SQL注入 5. 反序列化注入 6. 异常处理 java 类库中定义的一类RuntimeException可以通过预先检查进行规避,而不应该通过catch进行处理,比如IndexOutOfBoundsException,NullPointerException
java编码规范(日常编码总结,规范项目组员有统一的规范,方便合作,查错,重构等)当你抛弃规范随心所意的写代码时,等你之后再回来阅读时真有的一种全部删掉重写的冲动。 本规范最后一部分业务规范仅根据本人所在公司情况制定(游戏开发),请酌情考虑使用。 本project还在完善和验证中,希望和大家一起写出优雅而实用的代码。 正例: 应用工具类包名为 com.java.open.util、类名为 MessageUtils(此规则参考spring 的框架结构) ---- 6. 杜绝完全不规范的缩写,避免望文不知义。 ---- 备注: 以上内容摘自<阿里巴巴JAVA编程规范> ---- 7. 业务规范 1. 【强制】写业务逻辑时,一定要把对应的需求链接贴在代码注释里,方便在和策划撕逼时方便决定谁该背锅。 相关资料 阿里巴巴Java开发手册v1.2.0-1.pdf 阿里巴巴java编程规范2017版.pdf Android & Java 书写简洁规范的代码 https://github.com/xiaomoinfo
Java编码规范是指为了提高代码的可读性、可维护性、可扩展性等方面的规范性要求。 源文件名 每个源文件只包含一个公共类或接口。 源文件名应该与公共类或接口的名称完全匹配。 示例: String name = "\u4e2d\u56fd"; 格式化 使用4个空格作为缩进。 在操作符之前换行。 在打开括号 { 前不要换行。 示例: public void processOrder(Order order, boolean flag) { int[] array = new int[] {1, 2, 3}; Java编码规范的一部分,可以参考Oracle官方文档 异常处理 不要捕获 Throwable,应该只捕获实际需要处理的异常。 遵循Java编码规范可以使代码更加易于阅读、理解和维护,提高代码的质量和可靠性。
反例:_name / __name / $Object / name_ / name$ / Object$2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 【强制】杜绝完全不规范的缩写,避免望文不知义。反例:AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。 2)【推荐】如果是形容能力的接口名称,取对应的形容词做接口名(通常是–able 的形式)。正例:AbstractTranslator 实现 Translatable。15. 2) 获取多个对象的方法用 list 做前缀。3) 获取统计值的方法用 count 做前缀。4) 插入的方法用 save/insert 做前缀。5) 删除的方法用 remove/delete 做前缀。 2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。3) 展示对象:xxxVO,xxx 一般为网页名称。4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
为什么要规范日志规范的日志是养成良好编程习惯的开始,也是关键时刻解决严重BUG的救命稻草。 JUL(Java Util Logging)Sun公司对于Log4j十分眼红,在拒绝Log4j融入Java中的请求之后,自己开发了日志框架,当然基本可以看作是照搬。 Slf4j(Simple Logging Facade for Java)在这样的背景之下,Ceki Gülcü因为个人原因从Apach离职,并且企图想要靠自己制定一套取代JCL的规范,最终命名为Sfl4j 最后画出来这个图有点可怕,搭建可以保存下来多看几遍(为了方便观看,这里把辅助线去掉了)图片整个Java的日志框架发展出4框架和三个接口,主要使用的框架是:Log4j2、Slf4j、Logback、JUL ,datas.data2.chn,datas.data2.alarm_num,datas.data2.alarms);DRV_LOG_DEBUG("- 输出报警情况:电网编号:%d,报警数量:%d,报警内容
因为《JVM规范》中并没有规定这些东西。 PC寄存器 Java 虚拟机可以支持多条线程同时执行(可参考《Java 语言规范》第 17 章),每一条 Java虚拟机线程都有自己的 PC(Program Counter)寄存器。 说到这儿,你会发现在《JVM规范》第28页末尾写了这么一段话: 译者注:请读者注意避免混淆 Stack、 Heap 和 Java (VM) Stack、 Java Heap 的概念, Java 虚拟机的实现本身是由其他语言编写的应用程序 在 Java 虚拟机层面上, Java 语言中的构造函数在《Java 语言规范 (第三版)》(下文简称JLS3, § 8.8)是以一个名为的特殊实例初始化方法的形式出现的, 这个方法名称是由编译器命名的 规范的下一句也直接指明了。
C#编码规范 1 规范目的 ……………………………………………………… 3 2 适用范围 ……………………………………………………… 3 3 代码注释 ……………………………………………………… 为了执行规范,每个软件开发人员必须一致遵守编码规范; 使用统一编码规范的主要原因,是使应用程序的结构和编码风格标准化,以便于阅读和理解这段代码; 好的编码约定可使源代码严谨、可读性强且意义清楚,与其它语言约定相一致 2 适用范围 本规范主要以C#为开发语言的规范,为鲍亮实验室的原则性规范; 由于本规范是为撰写程序而设计,所以适用于一切有关程序撰写的工作事项。 3.4 代码行注释规范 1> 如果处理某一个功能需要很多行代码实现,并且有很多逻辑结构块,类似此种代码应该在代码开始前添加注释,说明此块代码的处理思路及注意事项等 2> 注释从新行增加 例如: String strTest1, strTest2; 应写成: String strTest1; String strTest2; 2> 代码缩进: l 一致的代码缩进风格
i = i + 1 submitted += 1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b) 与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更新对应的注释 命名规范 (1)模块应该用简短全小写的名字,如果为了提升可读性,下划线也是可以用的。Python包名也应该使用简短全小写的名字,但不建议用下划线。 (2)类名一般使用首字母大写的约定。 return 2 when add this option. 2 is exists differences. Go 开发规范 Go 语言规范 Go 代码审核规范官方地址: https://github.com/golang/go/wiki/CodeReviewComments 所有代码在发布前均使用gofmt进行修正 Go 语言规范工具 go 的官方工具链做得很好,可以直接使用gofmt和golint检查代码规范。
2) 左大括号后换行。 3) 右大括号前换行。 4) 右大括号后还有 else 等代码则不换行 表示终止的右大括号后必须换行。 正例: 1List<String> list = new ArrayList<String>(2); 2list.add("guan"); 3list.add("bao"); 4String[] array 正例: 1// 伪代码如下 2final boolean existed = (file.open(fileName, "w") ! 七、注释规约 【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/*内容/ 格式,不得使用 // xxx 方式。 2)宁缺勿滥。认为索引会消耗空间、严重拖慢更新和新增速度。 3)抵制惟一索引。认为业务的惟一性一律需要在应用层通过“先查后插”方式解决。