日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

head first java原文_Head First Java

發(fā)布時間:2023/12/10 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 head first java原文_Head First Java 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

條件語句

&和|可以用作條件語句,但是是長連接,左右兩邊的表達(dá)式必須都執(zhí)行完!這和&&和||不同,&&和||是短連接,只要左邊的表達(dá)式已經(jīng)能夠計算出整個表達(dá)式的結(jié)果,右邊的表達(dá)式就不會執(zhí)行!

繼承、重載、多態(tài)

重載和多態(tài)不是一個概念:

重載:類內(nèi)的、橫向的關(guān)系;兩個方法名稱相同,但參數(shù)不同,返回類型可以不同(但不能只改變返回類型),存取權(quán)限可以不同(因為重載的兩個方法之間沒有更多的關(guān)系,與繼承和多態(tài)無關(guān))。

多態(tài):類間(父類和子類)的、縱向的關(guān)系;繼承自父類的方法并覆蓋重寫,方法名稱相同,參數(shù)相同,返回類型相同或為該返回類型的子類(且子類保證能執(zhí)行父類的一切行為),存取權(quán)限相同或更為開放。

關(guān)于返回類型和存取權(quán)限的不相同情況,可以從子類的聲明不能影響父類中聲明的使用方式這一角度來看,因為多態(tài)的目的就是使用父類作為引用而不關(guān)心子類的實現(xiàn),,所以子類的聲明不能使得父類中的聲明所體現(xiàn)的使用方式無法使用。因而,返回類型子類不能超出父類的聲明,而存取權(quán)限子類不能限制父類的聲明。

調(diào)用method:

編譯器根據(jù)引用類型來判斷哪些method可以調(diào)用,而不是對象真正的類型。但是在調(diào)用哪個版本時,是根據(jù)對象的真正類型尋找最近的版本。

為什么會允許創(chuàng)建Object對象?

因為有時候就是需要創(chuàng)建一個通用的對象,一個輕量化的對象,最常見的是在線程的同步化中。

super、this

每個構(gòu)造函數(shù)可以選擇調(diào)用super()或this(),但不能同時調(diào)用,且它們必須是構(gòu)造函數(shù)的第一條語句(父類構(gòu)造函數(shù)是子類構(gòu)造函數(shù)執(zhí)行的第一步,父類必須先于子類構(gòu)造)。

輸出格式化

普通格式化

格式化說明:

格式化例子:%1$,06.1f

1$:使用第1個參數(shù)(計數(shù)是1基的,即格式化字符串后面的第一個參數(shù))作為浮點數(shù)進行格式化;

使用“,”分隔整數(shù)部分;

06:整數(shù)部分最少6個字符,不足部分用0補齊;

.1:小數(shù)點之后保留一位小數(shù);

f:浮點數(shù);

日期格式化(String.format(...))

格式化中“<”表示重復(fù)利用之前用過的參數(shù)

日期類

java.util.Calendar:set(...)中的月份是零基的,所以0表示一月份,并且set是有延遲的。

異常

try/catch是用來處理真正的異常,是程序員無法預(yù)測或防止的執(zhí)行期失敗狀況,而不是程序的邏輯錯誤,而runtimeexception大部分都是程序的邏輯問題,屬于非檢查異常(unchecked,編譯器不檢查)。

輸入輸出

串流(InputStream/OutputStream)

設(shè)計原則:

面向?qū)ο笤O(shè)計:每個類只要做好一件事情就行了。

所以java的輸入/輸出API帶有連接類型的串流,代表來源與目的地之間的鏈接,連接串流將串流與其他串流連接起來。

一般來說,串流要兩兩連接才有意義——其中一個表示連接(輸入的來源或輸出的目的地),另一個表示要被調(diào)用方法(高層API,讀取出真正的高層次數(shù)據(jù)類型或輸出真正的高層次數(shù)據(jù))。

比如FileOutputStream用于想文件寫入字節(jié),但我們通常并不直接寫字節(jié),而是以對象層次的觀點來寫入,所以需要高層次的連接串流處理高層次的對象數(shù)據(jù)到字節(jié)流的連接。

于是這樣就可以通過不同的組合來達(dá)到最大的適應(yīng)性,而不必在一種串流類中考慮所有可能的情況(這是不可能的)。

序列化

標(biāo)記接口:

Serializable接口又被成為marker或tag類的標(biāo)記用接口,所有需要被序列化的類都需要聲明實現(xiàn)該接口,而實際上沒有任何方法需要被實現(xiàn),只是用來標(biāo)記,告訴JVM這個類可以被序列化。

而一個類被序列化時,其內(nèi)部所有的成員變量也將被序列化,因此它的成員變量也必須是能被序列化的,即實現(xiàn)了Serializable接口。

過濾:

如果某個成員變量不需要序列化,則使用關(guān)鍵字transient標(biāo)記一下,序列化將跳過這個變量。

指向不變性:

序列化會區(qū)分兩個變量指向的對象是否相同,如果序列化時兩個變量指向同一個對象,則反序列化時這兩個變量依然指向同一個對象。

父類與子類:

不可序列化的父類(非final)可以有可序列化子類,但是當(dāng)對象被反序列化時,父類的構(gòu)造函數(shù)將和創(chuàng)建新的對象一樣執(zhí)行(可序列化類的構(gòu)造函數(shù)不會被執(zhí)行),屬于該不可序列化父類及其祖先類的成員變量將被構(gòu)造函數(shù)初始化,但是被可序列化子類重載的成員變量將按照子類中的定義(是否transient)進行序列化和反序列化。

static:

靜態(tài)變量不會被序列化,反序列化后靜態(tài)變量會維持類中原本的樣子,而非存儲時的值。

序列化版本serialVersionUID:

在類中顯式地保存這個ID,則可以保證可序列化的類在演化后依然保持相同的ID,從而在經(jīng)歷了不損壞序列化的演化后該類依然能夠反序列化之前序列化的數(shù)據(jù)(新加的變量將使用默認(rèn)值)。

泛型

在方法參數(shù)中使用萬用字符?時,編譯器會阻止任何可能破壞引用參數(shù)所指集合的行為,即只讀不可寫:

class?ChildClass?extends?SuperClass?{

...

}

public?void?f(List?extends?SuperClass>?list)?{

list.get(0);?//?ok

list.add(new?ChildClass());?//?wrong

}

這樣倒是可以:

public??void?f(List?list)?{

list.get(0);?//?ok

list.add((T)?new?ChildClass());

}

總結(jié)

以上是生活随笔為你收集整理的head first java原文_Head First Java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。