从代码规范学到的细节

1.+号慎用

1.1 日志打印我们以前都用错了

原始:

 LOGGER.info("解析json SQL内容:jdbcUrl:"+jdbcUrl+"\t username:"+username+"\t password:"+password+"\t tableName:"+tableName+"\r\n");

事故:
最容易造成

java.lang.OutOfMemoryError: Java heap space error

原因:
1. 寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)。
6. 非RAM存储:硬盘等永久存储空间

上面一条打印语句,一共生成了9个String对象(每个双引号之间,每个变量,因为字符串每次相加都会生成一个新的对象,String类型是不可变的对象)栈中存储9个字符串引用,堆中存储了9个字符串数据。当我们打印的比较多的时候,会造成异常。

改进

采用占位符{}或者$

LOGGER.info("解析json SQL内容:jdbcUrl:{},username:{},password:{},ableName:{} \r\n",jdbcUrl,username,password,tableName);

这样的话,前面双引号内的事一个字符串,后面是4个,一共才5个,减少了4个。

1.2 字符串相加

String sql = "SELECT count("+r.getFieldName()+")  from user WHERE "+r.getFieldName()+"=\"\" ";

超过5个以上,必须用StringBuilder

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/80781808
今日推荐