一、时间格式为什么有大写有小写呢?
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
为了区分月份和分钟,用大写M代表月份,小写m代表分钟
而大写的H代表24小时制,小写h代表12小时制
二、下面的程序判断等值的方式,使用那种最合适呢?
public class Hello {
public static void main(String[] args) {
String year = "2023";
// 方式1
System.out.println("2023".equals(year));
// 方式2
System.out.println(year.equals("2023"));
}
}
方式1是最合适的,当year为null值的时候,方式2就会报空指针异常,而方式1不会
public class Hello {
public static void main(String[] args) {
String year = null;
// 方式1
System.out.println("2023".equals(year));
// 方式2
System.out.println(year.equals("2023"));
}
}
三、编程相关的命名不单要求正确,还需要规范
1、命名可以使用ali / alibaba / taobao / cainiao / aliyun / youku / hangzhou 等国际通用的名称,但不应该使用niHao(你好)、youhui(优惠)等拼音,更不允许直接使用中文表示
2、规范使用驼峰命名,类名第一个字母要求大写,而方法名、变量名第一个字母要求小写,常量名要求全部大写,中间的单词用下划线分隔
3、包名统一使用小写,原则上只能是一个单词,例如一个包,com.wu.util,每个单词由点号分隔
public class Hello {
private final static String HELLO_NAME = "helloName";
private String helloName = "helloName";
public void helloWorld(String value) {
System.out.println("hello world!");
}
}
4、一些常见的命名规则:
1) 获取对象或属性的方法用get作前缀,如getName()
2) 设置对象或属性的方法用set作前缀,如setName()
3) 获取统计值的方法用count作前缀,如countMoney()
4) 插入的方法用save/insert作前缀,如insertStudentEntity()
5) 删除的方法用remove/delete作前缀,如deleteStudentEntity()
6) 修改的方法用update作前缀,如updateStudentEntity()
7) 判断的方法一般以is作为前缀,如isEmpty()
8) 数据对象:xxxDO,xxx即为数据表名。
9) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
10) 展示对象:xxxVO,xxx一般为网页名称。
11) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
四、使用浮点数的时候需要注意精度问题
1、在合适使用float或double的场景中,无论基本数据类型还是包装数据类型,都使用双精度浮点数即double或Double
因为float精度比较低,而且使用的时候不允许强制转换为double,使用的数字后面需要f,如1f、2f等等
2、浮点数不能直接使用 == 号或者equals()判断两个浮点数是否相等,因为浮点数采用“尾数+阶码”的编码方式来存储的,也就是说,二进制无法精确表示一个10进制的小数,因此有可能两个数理论上是相等的,但是用 == 号比较会返回false
如果要判断两个浮点数是否相等,需要确定一个精度,在这个精度内两个数相等的话则认为这两个浮点数是相等的
例如double的精度是1e-12
public class Hello {
public static void main(String[] args) {
Double d1 = 3.333333333333;
Double d2 = 10/3.0;
System.out.println(d1 == d2);
System.out.println(Math.abs(d1 - d2) <= 1e-12);
}
}
3、如果对精度有更高的要求,可以选择使用BigDecimal类型,但需要注意不要使用new BigDecimal(double)的方式直接生成,这种方式存在丢失精度的风险。要使用BigDecimal.valueOf(double)的方式
import java.math.BigDecimal;
public class Hello {
public static void main(String[] args) {
BigDecimal bigDecimal1 = new BigDecimal(3.33333333333333333);
BigDecimal bigDecimal2 = BigDecimal.valueOf(3.33333333333333333);
System.out.println(bigDecimal1);
System.out.println(bigDecimal2);
}
}
五、禁止出现魔法值
魔法值指的就是让人无法理解含义的常量,首先看以下代码
public class Hello {
public void haha(String value) {
if ("0".equals(value)){
// TODO
} else if ("1".equals(value)) {
// TODO
} else {
// TODO
}
}
}
“0”和”1”就是魔法值,必须要联系上下文才能理解它的含义,在开发中应该避免这种写法,建议的写法是:
public class Hello {
private final static String FEMALE = "0";
private final static String MALE = "1";
public void haha(String value) {
if ("0".equals(value)){
// TODO
} else if ("1".equals(value)) {
// TODO
} else {
// TODO
}
}
}
这样就容易理解代码的含义了,大致的意思就是判断value的值到底是男性或者是女性
六、代码风格
1、使用的所有的运算符号如+、-、&&、==等符号,必须在两端加上一个空格
2、tap的进格应该是标准的四个空格
3、注释的双斜线与注释内容之间有且仅有一个空格
4、方法参数在定义和传入时,多个参数逗号后必须加空格。
5、if/for/while/switch/do 等保留字与括号之间都必须加空格。
public class Hello {
// 注释前空一个空格
public void haha(String s1, String s2, String s3){
int value = 1;
if (value == 1){
for (int i = 0; i < 100; i++) {
}
} else if (value == 2) {
} else {
}
}
}