靜態塊(static{})
(1) static關鍵字還有一個比較關鍵的作用,用來形成靜態代碼塊(static{}
即static塊 )以優化程序性能。
(2) static塊可以置於類中的任何地方,類中可以有多個static塊。
(3) 在類初次被加載的時候執行且僅會被執行一次(這是優化性能的原因!!!),會按照static塊的順序來執行每個static塊,一般用來初始化靜態變量和調用靜態方法。
下面通過兩段代碼,說明 static{}
爲什麼能優化程序性能。
實例
/**
* 每次調用isBornBoomer的時候
* 都會生成startDate和birthDate兩個對象,造成了空間浪費
*/
class Person{
private Date birthDate;
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
Date startDate = Date.valueOf("1997");
Date endDate = Date.valueOf("2019");
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}
/**
* 這裏使用了static塊
* 只需要進行一次的初始化操作
* 節省內存空間,優化性能
*/
class Person{
private Date birthDate;
private static Date startDate,endDate;
static{
startDate = Date.valueOf("1997");
endDate = Date.valueOf("2019");
}
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}
注意:強調一下static塊是會按照順序執行,與main入口函數無關。
參考
[1] https://blog.csdn.net/qq_41647999/article/details/87966487