有一个字符串,是固定的,每次请求都需要解析,非常耗时,不友好。 被同事CR代码的时候,说这种可以用代码块进行解决,这样就不用每次请求都需要解析了。
CR的代码
@RequestMapping("/smartjson")
public ResultUtil smartJson() {
String text = "........................."; // 这个text字符串非常大 每次请求都会解析
jsonVo = JSON.parseObject(text, clazz);
}
修改后的代码
private static ResponseJsonVo jsonVo;
static {
String text = ".........................";
jsonVo = JSON.parseObject(text, clazz);
}
@RequestMapping("/smartjson")
public ResultUtil smartJson() {
//直接使用jsonVo即可
}
- 这样只有在初始化的时候执行,并不是每次请求都会执行,岂不美哉。
好好研究下代码块的执行时机。
静态代码块和构造代码块
构造代码块,顾名思义就是会在类初始化的时候执行
public class Test {
//构造函数
public Test() {
System.out.println("fourth step");
}
//静态代码块 在jvm加载类时执行,仅执行一次
static {
System.out.println("first step");
}
//构造代码块 只有在类创建的时候,才会执行
{
System.out.println("third step");
}
// 主函数
public static void main(String[] args) {
new Test();
}
//静态代码块 在jvm加载类时执行,仅执行一次
static {
System.out.println("second step");
}
}
- 执行顺序 静态代码块 > 构造代码块 > 构造函数