記錄。。。。

發現本身的腦子愈來愈很差使了,不少東西很容易迷糊或者忘掉,因此仍是記起來,免得又迷糊,忘掉了。java

--------------------------start正則表達式

容器部分

增強否循環其實就是語法糖,對循環的一種包裝。數組

對於擁有迭代器的類,如ArrayList,LinkedList或者其餘集合類,編譯後實際上是轉換成了 迭代器進行的。spa

對於沒有迭代器的,如數組,會被轉換成普通的for循環。.net

class 反編譯後:設計

對於實現了 Iterable 都是能夠迭代的,本接口相似於 可迭代的 一種標識(跟Serializable 差很少吧,不過須要實現裏面的方法)3d

Iterable 跟 Iterator代理

都是接口,不過Iterable 更像是能力標識接口,Iterator 更像是實現功能接口。code

都是要實現方法,能夠經過匿名內部類的方式。對象

TIJ4 P243-P244

異常繼承體系

單繼承或實現中:

在父類方法中,子類能夠拋出一樣的異常,或者拋出更小的,更細緻的異常。即:子類異常不能比父類異常更大。

在父類方法中,沒有拋出任何異常,子類也沒法拋出異常。即:子類沒法憑空拋出異常。

繼承且實現同時有:

當兩個父類(一個抽象類,一個接口)中同一個方法(方法名,參數列表都全同樣),拋出的兩個異常都是不相同的(兩個異常沒有繼承關係),那麼子類中的方法沒法拋出異常,必須進行捕獲。。。

當父類構造器中有某異常聲明時,子類必須拋出次異常,且能夠拋出其餘異常,(由於子類構造器會調用父類構造器,若是將super()用try catch 捕獲,會顯示,super()必須在第一行)

TIJ4 P270-P271

收穫:看完這個章節之後,對java中的那種繼承貌似更有了一點感觸,之前一直以爲繼承就是爲了抽象出共同的屬性,或者方法,接口更是沒有什麼用。。。僅僅是爲了子類可替換性?可是今天看了異常,以爲繼承、抽象是很重要的,尤爲是你定義好要拋出什麼樣的異常。這樣設計,子類就能夠很規範,何時子類必須捕獲本身的異常,何時子類也能夠拋出更細緻的異常。

總感受那種高深的話在嘴邊,但卻又沒辦法說出來。。。。。。也可能只是有了一丁點感觸,卻又不是很深入,沒能用本身的語言表達出來。

正則表達式

TIJ4中的String 部分中關於正則的都沒有看,看不懂。等先入門了正則表達式在看。

加載順序

靜態變量

靜態初始化塊

變量

初始化塊

構造器

若是有繼承父類,則 先初始化父類, 在父類中 也是 這個順序

靜態變量

靜態初始化塊

變量

初始化塊

構造器

所以

父類--靜態變量

父類--靜態初始化塊

子類--靜態變量

子類--靜態初始化塊

父類--變量

父類--初始化塊

父類--構造器

子類--變量

子類--初始化塊

子類--構造器

Java基礎知識之初始化——定義時初始化和構造器初始化的差別?

定義時初始化和構造器初始化的差別:

變量定義時初始化的次數是一次,而構造器初始化的次數是兩次。

一個類的準備工做包括三部分:

一、加載。這是由類加載器執行的。該步驟將查找字節碼(一般在classpath所指定的路徑中查找,單這並不是是必須的),而且從這些字節碼中建立一個Class對象。

二、連接。在連接階段將驗證類中的字節碼,爲靜態與分配存儲空間,而且,若是是必須的話,將解析這個類建立的對其餘類的全部引用。

三、初始化。若是該類具備超類,則對其超類初始化,執行靜態初始化器和靜態初始化塊。

初始化被延遲到了對靜態方法(構造器其實也是靜態的)或者很是數靜態域進行首次引用時才執行。(new 或者 使用靜態方法,常量等,都會引發初始化)

Class.forName與Class.class的區別。

Class.forName會致使靜態域的加載 Class.class則不會。即 不會觸發第三步

靜態編常量:static final

當訪問static final 的常量的時候,也不會觸發初始化,且僅僅會連接一次。

普通靜態常量:static

當訪問static的常量時,會觸發初始化,初始化域會被觸發,連接每次都會被觸發。

即:每次都要爲這個靜態常量進行分配空間,初始化該存儲空間。

TIJ4 P319-P320

關於動態代理

一直以爲很神奇,動態代理究竟是咋麼個回事,爲何會生成一個這樣子的類,爲何會調用。

資訊

泛型

參數能夠用在類名後,

也能夠寫在方法的返回參數前。

若是 類中有

那麼方法中,屬性中均可以使用T,使用泛型。

若是隻是想單純的對某個方法使用泛型,就在方法的返回值前添加。

 

枚舉

以前,一同窗給我了一個截圖,經過枚舉調用方法。

相似截圖

UriEncoder是枚舉類,FIXING是一個枚舉類型。

打開源碼看了一下:

原來是在枚舉內 實現了方法,而後就本身試着寫了,可是發現怎麼都調用不到。

而後看了整個類,發現,原來枚舉內的方法,在枚舉類內都有抽象定義。

而後在枚舉中進行了具體實現,而後就能夠經過不一樣的枚舉類型,調用具體的不一樣的實現。

真的是秀。。。

關於泛型

List list=new ArrayList<Integer>();
List<Integer> list=new ArrayList<Integer>();
List<Integer> list=new ArrayList();

其中 第一行是沒有泛型的。。。2 3行有。

由於泛型是在編譯時候檢查的,並且是經過引用進行檢查的,new list 只是開闢了一個空間,並無對泛型進行一個約束。

 

泛型通配符:

當使用通配符

下界通配符

List<? extends zzz>=new ArrayList<xxx>  其中 xxx extends zzz

這是容許的,可是丟失了add的操做能力,沒法添加任何元素。

上屆通配符

相關文章
相關標籤/搜索