天天看點

java基礎之靜态代碼塊、構造代碼塊

靜态代碼塊、構造代碼塊,成員變量,構造方法

  1. 靜态代碼塊隻執行一次,是以比較合适的還是放在單例的類裡面,做一些初始化的事情,且優先于任何類裡面的東西,除非有

    static

    修飾的别的變量或者方法,在他之前。
  2. 構造代碼塊優先級也很高,但是低于靜态代碼塊和成員變量,無論是否是

    static

    的成員變量,是以可以做一些成員變量的防空判斷在構造代碼塊裡面。
  3. 構造方法,優先級低于前兩個,但優于普通方法,是以你想要調用一個類裡面的public方法的話,必須先

    new

    ,用new出來的對象才可以

    .

    出來該方法。
思考:那麼一個類裡面的public static的方法,是什麼時候加載的呢?

答案:一個類裡面所有static修飾的東西(代碼塊,變量,方法),是按照你寫的順序去執行的。

擷取随機數的注意項

今天用findbugs掃了一下項目,果然有驚喜,發現很多當初想當然的錯誤。其中有個粗心大意的錯就是擷取一個0-999的随機數的方法。

return (int)Math.getRandom() * 1000

自己也是太久沒寫了,有點忘記優先級了,以為先算的乘法,被findbug掃出來了,才知道,這個方法始終會獲得

,自己修改了之後加了個括号。但是看到findbugs上面的建議,是用

Random.nextInt()

這個方法。才知道其實

java.util

包下面其實早就幫我們想好了,隻不過自己還是用

Math

裡面的自己乘,有點笨了。

java基礎之靜态代碼塊、構造代碼塊

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。

個人複習java基礎的小筆記,是以并沒有太多的邏輯順序在裡面