命名规范
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
正例:name / sex / age 反例:*name / _sex / $age
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式
也要避免采用。
正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。 反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3
类名使用 UpperCamelCase风格。
但以下情形例外:BO/DTO/VO/AO/PO/UID等。
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
正例: localValue / getHttpMessage / inputUserId 反例:local_value / localvalue
常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例:UNIVERSITY_OF_CODE 反例:UNI_OF_CODE
抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。
正例:BaseService / NameEmptyException / UserServiceTest
类型与中括号紧挨相连来表示数组。
正例:定义整形数组 int[] arrayDemo; 反例:在 main 参数中,使用 String args[]来定义。
POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。
正例:success 反例:is_success
包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例:应用工具类包名为 com.alibaba.ai.util、类名为 MessageUtils(此规则参考 Spring 的框架结构)
杜绝完全不规范的缩写,避免望文不知义。
正例:BaseService / NameEmptyException / UserServiceTest 反例:BaseS / NEException / USTest
注释
行内注释
// 单行注释
多行注释
/* 这是多行注释 */
类注释
类注释必须放在 import 语句之后,类定义之前。
标记由 @开始, 如 @author或 @param。
package test; import java.util.Random; /** * @author XUEW */ public class RandomTest { }
方法注释
每一个方法注释必须放在所描述的方法之前。
/** * 这是hello方法 * @param name 名字 * @return 打招呼 */ public String hello(String name) { return "Hello" + name; }
标记
类注释和方法注释上均可以使用标记进行文档的详细描述,之后方便生成 Java Doc。
通用标记:既可以声明在类注释,也可以声明在方法注释。
标记 | 描述 |
@author | 作者,这个标记将产生一个 author(作者)条目。可以使用多个 @author 标记,每个标记对应一个作者。 |
@version | 版本,这个标记将产生一个 version(版本)条目。这里的文本可以是对当前版本的任何描述。 |
@since | 始于,这个标记将产生一个 since(始于)条目。这里的 text 可以是对引入特性的版本描述。例如:@since version 1.7.10 |
@deprecated | 过时,这个标记将对类、方法或变量添加一个不再使用的注释。文本中给出了取代的建议。 |
@see | 超链接,这个标记将在 see 后面部分增加一个超级链接。它可以用于类中,也可以用于方法中。例如:@see world.xuewei.entity.Employee#raiseSalary(double) |
@date | 创建日期,例如:@date 2022-01-01 12:30 |
方法标记:声明在方法注释上
标记 | 描述 |
@param | 变量描述,这个标记将对当前方法的 param(参数)部分添加一个条目。这个描述可以占据多行,并可以使用 HTML标记。一个方法的所有 @param标记必须放在一起。 |
@return | 返回,这个标记将对当前方法添加 return(返回)部分。这个描述可以跨越多行,并可以使用 HTML 标记。 |
@throws | 异常,这个标记将添加一个注释,用于表示这个方法有可能抛出异常。 |
基本数据类型
Java 是一种强类型语言,定义一个变量就需要声明一个类型。
Java有一个能够表示任意精度的算术包,通常称为“大数值”(big number)。虽然被称为大数值,但它并不是一种新的 Java 类型,而是一个 Java 对象。
1个字节(Byte)= 8 比特位(Bit)
4 种整型
由于 Java 程序必须保证在所有机器上都能够得到相同的运行结果, 所以各种数据类型的取值范围必须固定。
在通常情况下,int 类型最常用。但如果表示星球上的居住人数,就需要使用 long 类型了。byte 和 short类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。
长整型数值有一个后缀L或l,如4000000000L。
2 种浮点型
除了 float 和 double,还有三个特殊的浮点数值,用来表示溢出和出错的情况。
- 正无穷大 Double.POSITIVE_INFINITY
- 负无穷大 Double.NEGATIVE_INFINITY
- NaN(不是一个数字)Double.NaN
例如:正数 / 0 = 正无穷大,0 / 0 = NaN
判断数字是否为无穷大小 d.isInfinite()
判断数字是否为数字 d.isNaN()
绝大部分应用程序都采用 double 类型,但是浮点数值不适用于无法接受舍入误差的金融计算中。2.0 - 1.1 = 0.89999999999…,这种舍入误差原因是浮点数系统使用二进制来表示,但是二进制系统无法精确的表示分数。比如三分之一就没法用二进制表示。
1 种字符型
**char 类型的字面量值要用单引号括起来,只需要 1 个字节。**例如:‘A’ 是编码值为 65 所对应的字符常量。它与 "A"不同,"A"是包含一个字符 A 的字符串。
char 类型的值可以表示为十六进制值。其范围从 \u0000 到 \uffff,特殊字符的转义序列如下。
注意:当心注释中的\u片段,可能会报语法错误
比如下面的注释就会报错
public static void main(String[] args) { // 目标地址 c:\user\home System.out.println("Hello World"); }
1 种真值型
boolean(布尔)类型有两个值:false 和 true,用来判定逻辑条件。
关于布尔类型的存储字节数,网上大概有三种说法:
1个比特
理由是 boolean 类型的值只有 true 和 false 两种逻辑值,在编译后会使用 1 和 0 来表示,这两个数在内存中只需要 1 位(bit)即可存储,位是计算机最小的存储单位,八分之一个字节。
1个字节
理由是虽然编译后 1 和 0 只需占用 1 位空间,但计算机处理数据的最小单位是 1 个字节,1 个字节等于 8 位,实际存储的空间是:用 1 个字节的最低位存储,其他 7 位用 0 填补,如果值是 true 的话则存储的二进制为:0000 0001,如果是 false 的话则存储的二进制为:0000 0000。
4个字节
理由来源是《Java虚拟机规范》一书中的描述:“虽然定义了 boolean 这种数据类型,但是只对它提供了非常有限的支持。在 Java 虚拟机中没有任何供 boolean 值专用的字节码指令,Java 语言表达式所操作的 boolean 值,在编译之后都使用 Java 虚拟机中的 int 数据类型来代替,而 boolean 数组将会被编码成 Java 虚拟机的 byte 数组,每个元素 boolean 元素占 8 位”。这样我们可以得出 boolean 类型单独使用是 4 个字节,在数组中又是 1 个字节。
变量转换
隐式转换
两个数值进行二元操作时(例如 n + f,n 是整数,f 是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。
- 如果两个操作数中有一个是 double 类型,另一个操作数就会转换为 double 类型。
- 如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型。
- 如果其中一个操作数是 long 类型,另一个操作数将会转换为 long 类型。
- 否则,两个操作数都将被转换为 int 类型。
强制转换
在必要的时候,int 类型的值将会自动地转换为 double 类型。但另一方面,有时也需要将 double 转换成 int。在 Java 中,允许进行这种数值之间的类型转换。
当然,有可能会丢失一些信息。在这种情况下,需要通过强制类型转换(cast)实现这个操作。
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。
double x = 9.997; int nx = (int)x;
上面这种情况会丢失精度,所以注意不要将大范围类型的数据转为小范围类型的数据。
Java语法掌握:打好编程基础的关键(二)https://developer.aliyun.com/article/1480872