靜态代碼塊、構造代碼塊,成員變量,構造方法
- 靜态代碼塊隻執行一次,是以比較合适的還是放在單例的類裡面,做一些初始化的事情,且優先于任何類裡面的東西,除非有
修飾的别的變量或者方法,在他之前。static
- 構造代碼塊優先級也很高,但是低于靜态代碼塊和成員變量,無論是否是
的成員變量,是以可以做一些成員變量的防空判斷在構造代碼塊裡面。static
- 構造方法,優先級低于前兩個,但優于普通方法,是以你想要調用一個類裡面的public方法的話,必須先
,用new出來的對象才可以new
出來該方法。.
思考:那麼一個類裡面的public static的方法,是什麼時候加載的呢?
答案:一個類裡面所有static修飾的東西(代碼塊,變量,方法),是按照你寫的順序去執行的。
擷取随機數的注意項
今天用findbugs掃了一下項目,果然有驚喜,發現很多當初想當然的錯誤。其中有個粗心大意的錯就是擷取一個0-999的随機數的方法。
return (int)Math.getRandom() * 1000
自己也是太久沒寫了,有點忘記優先級了,以為先算的乘法,被findbug掃出來了,才知道,這個方法始終會獲得
,自己修改了之後加了個括号。但是看到findbugs上面的建議,是用
Random.nextInt()
這個方法。才知道其實
java.util
包下面其實早就幫我們想好了,隻不過自己還是用
Math
裡面的自己乘,有點笨了。

Collection接口
自己想寫一個判斷一個List是否為空的方法,但是想到雖然List用的最多,但是還是多抽一層吧,是以想到用
Collection
,然後用的泛型
E
,但是真好玩,當你用泛型類的話,你的方法前面就要多加一個東西來表明你是個泛型。通常一個方法就
public/private
+
static/不加
+
傳回值的類型
+
方法名
+
參數(形參/實參)
。但是泛型的方法,就多了
<E> / <T>
public static <E> boolean collectionEmpty(Collection<E> collections) {
if (collections == null || collections.size() == 0) {
return true;
}
return false;
}
instanceof用法
一般來說,當你寫一個通用方法,裡面的參數是
Object
、
E
、
T
,會用到這個
instanceof
來判斷參數的類型。但是該方法有個很好玩的點是,如果你傳進來的是
List
和
Set
,那麼你去直接
instanceof
這兩個類的話,是可以的,但是你如果去
instanceof
他們的父類
Collection
的話,也是
true
。是以這個用法還是最好精确到你想要直接操作的類。
FaEntity fa = new SonEntity();
if (fa instanceof FaEntity) {
System.out.println("---- fa ---");
}
if (fa instanceof SonEntity) {
System.out.println("---- son ---");
}
SonEntity son = new SonEntity();
if (son instanceof FaEntity) {
System.out.println("---- fa111 ---");
}
if (son instanceof SonEntity) {
System.out.println("---- son111 ---");
}
運作結果:
---- fa ---
---- son ---
---- fa111 ---
---- son111 ---
Map的循環
如果單純拿值的話,可以用
keySet
,但是循環周遊整個map的話,還是推薦用entrySet來周遊。
Map<String, TestEntity> nowDevs = new HashMap<>();
Set<Entry<String, TestEntity>> entrySet = nowDevs.entrySet();
for (Entry<String, TestEntity> iterater : entrySet) {
System.out.println(iterater.getKey());
System.out.println("---------------");
System.out.println(iterater.getValue());
}
Set如何保證去重?
其實就是根據你add進去的
E
的
hashcode
和該類裡面的
equals
方法,是以想要改變一個
E
放進
Set
裡面的規則的話,隻需要
@Override
hashCode
和
equals
就可以了。
簡單的例子來說:在我們的實體類裡面,跟DB裡面的資料應該是對應的。是以
primary key 'ID'
應該是唯一的,是以可以單純的去用
ID
去判斷是否是同一個entity。