Java 拾遺五

1. 解析XML的幾種方式的原理與特點(diǎn):DOM、SAX饺蔑、PULL

  • DOM(Document Object Model)

DOM是基于樹(shù)形結(jié)構(gòu)的的節(jié)點(diǎn)或信息片段的集合孔祸,允許開(kāi)發(fā)人員使用DOM API遍歷XML樹(shù)筑公、檢索所需數(shù)據(jù)封救。
分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造樹(shù)形結(jié)構(gòu),然后才可以檢索和更新節(jié)點(diǎn)信息惩坑。
由于DOM在內(nèi)存中以樹(shù)形結(jié)構(gòu)存放,因此檢索和更新效率會(huì)更高蔓钟。但是對(duì)于特別大的文檔,解析和加載整個(gè)文檔將會(huì)很耗資源兰绣。

  • SAX(Simple API for XML)

SAX解析器是一種基于事件的解析器党觅,它的核心是事件處理模式镐牺,主要是圍繞著事件源以及事件處理器來(lái)工作的募胃。當(dāng)事件源產(chǎn)生事件后,調(diào)用事件處理器相應(yīng)的處理方法,一個(gè)事件就可以得到處理论巍。
在事件源調(diào)用事件處理器中特定方法的時(shí)候,還要傳遞給事件處理器相應(yīng)事件的狀態(tài)信息,這樣事件處理器才能夠根據(jù)提供的事件信息來(lái)決定自己的行為密似。
SAX解析器的優(yōu)點(diǎn)是解析速度快,占用內(nèi)存少。非常適合在Android移動(dòng)設(shè)備中使用邑滨。

  • PULL

PULL解析器的運(yùn)行方式和SAX類似面哥,都是基于事件的模式归榕。不同的是,在PULL解析過(guò)程中盅蝗,我們需要自己獲取產(chǎn)生的事件然后做相應(yīng)的操作,而不像SAX那樣由處理器觸發(fā)一種事件的方法贼穆,執(zhí)行我們的代碼。
PULL解析器小巧輕便,解析速度快闪彼,簡(jiǎn)單易用畏腕,非常適合在Android移動(dòng)設(shè)備中使用铭污,Android系統(tǒng)內(nèi)部在解析各種XML時(shí)也是用PULL解析器嘹狞。

2. Java 與 C++ 對(duì)比

Java其實(shí)也是由C++發(fā)展而來(lái)知市,保留了C++的大部分內(nèi)容,其編程方式類似于C++,但是摒棄了C++的諸多不合理之處,從根本上解決了C++的固有缺陷。使得Java句法更清晰,規(guī)模更小,更易學(xué),同時(shí)更趨于健壯性,安全性和平臺(tái)無(wú)關(guān)性。

  • 指針

指針是C++語(yǔ)言中最靈活也最容易出錯(cuò)的數(shù)據(jù)類型,易出現(xiàn)由于指針誤操作而導(dǎo)致的系統(tǒng)崩潰,同時(shí)指針操作內(nèi)存時(shí)也經(jīng)常出錯(cuò)。
Java沒(méi)有指針的概念,更有利于程序的安全敞峭。

  • 內(nèi)存管理

C++語(yǔ)言中必須通過(guò)程序釋放內(nèi)存資源,增加了程序設(shè)計(jì)者的負(fù)擔(dān),再次釋放已釋放的內(nèi)存塊或釋放未分配的內(nèi)存塊會(huì)造成系統(tǒng)崩潰,忘記釋放不再使用的內(nèi)存塊也會(huì)逐漸耗盡系統(tǒng)資源进宝。
Java自動(dòng)進(jìn)行內(nèi)存回收操作徐块,當(dāng)一個(gè)對(duì)象不再被用到時(shí),無(wú)須使用內(nèi)存回收器,只需要給它加上標(biāo)簽以示刪除。無(wú)用內(nèi)存的回收器在后臺(tái)運(yùn)行,利用空閑時(shí)間工作壹蔓,保證了系統(tǒng)資源的完整性行疏,避免了內(nèi)存管理不周而引起的系統(tǒng)崩潰贞让。

  • 數(shù)據(jù)類型一致性

在C++語(yǔ)言中,不同的平臺(tái)上,編譯器對(duì)簡(jiǎn)單數(shù)據(jù)類型分別分配不同的字節(jié)數(shù)雨膨,導(dǎo)致了代碼數(shù)據(jù)的不可移植性踩身。
在Java中附鸽,采用基于IEEE標(biāo)準(zhǔn)的數(shù)據(jù)類型赌蔑,無(wú)論任何硬件平臺(tái)上對(duì)數(shù)據(jù)類型的位數(shù)分配總是固定的。

  • 內(nèi)存管理

在C++中,會(huì)出現(xiàn)數(shù)據(jù)類型的隱含轉(zhuǎn)換,涉及到自動(dòng)強(qiáng)制類型轉(zhuǎn)換椎例,使得不安全因素大大增加脖祈。
Java中系統(tǒng)要對(duì)對(duì)象的處理進(jìn)行嚴(yán)格的相容性檢查席纽,防止不安全的轉(zhuǎn)換。如果需要竟纳,必須由程序顯式進(jìn)行強(qiáng)制類型轉(zhuǎn)換缘挑。

  • 多重繼承

C++支持多重繼承,允許許多父類派生一個(gè)子類卖哎,雖然功能強(qiáng)大,但使用復(fù)雜维贺,而且會(huì)引起許多麻煩溯泣,編譯程序?qū)崿F(xiàn)也很不易。Java不支持多重繼承收夸,但允許一個(gè)類實(shí)現(xiàn)多個(gè)接口,即實(shí)現(xiàn)了C++的多重繼承功能监透,又避免了C++的缺陷任岸。

  • 函數(shù)

在C中再榄,代碼組織在函數(shù)中,函數(shù)可以訪問(wèn)程序的全局變量; C++增加了類享潜,提供了類方法困鸥,但由于C++仍然支持C,所以C++程序中仍然可以使用C的函數(shù)剑按,結(jié)果導(dǎo)致函數(shù)和方法混合使用疾就,使得程序比較混亂 。
Java沒(méi)有函數(shù)艺蝴。作為一種比C++更純的面向?qū)ο蟮恼Z(yǔ)言猬腰,強(qiáng)迫開(kāi)發(fā)人員把所有例行程序包括在類中,可以更好的組織編碼猜敢。

3. Java 1.7 與 Java 1.8 新特性

  • Java 1.7 新特性

switch 語(yǔ)句中支持使用字符串了
支持 List tempList = new ArrayList<>()的聲明方式漆诽,其實(shí)是泛型實(shí)例化類型自動(dòng)推斷。
提供自定義關(guān)閉類的接口锣枝,實(shí)現(xiàn)AutoCloseable ,就可以在類銷毀的時(shí)候自動(dòng)關(guān)閉一些資源兰英。
char值可以進(jìn)行equals比較
boolean值支持反轉(zhuǎn)和位運(yùn)算
File System.* 增加了很多get環(huán)境信息的工具方法
try catch支持捕獲多個(gè)異常撇叁,豎線分割異常即可
try塊中使用的資源可以不用手動(dòng)在finally中關(guān)閉
安全的加減乘除操作

  • Java 1.8 新特性

一、Java 8允許我們給接口添加一個(gè)非抽象的方法實(shí)現(xiàn)畦贸,只需要使用 default關(guān)鍵字即可陨闹,這個(gè)特征又叫做擴(kuò)展方法楞捂,示例如下:
interface Formula {
double calculate(int a);
default double sqrt(int a) {
return Math.sqrt(a);
}
二、Lambda 表達(dá)式
三趋厉、函數(shù)式接口
四寨闹、方法與構(gòu)造函數(shù)引用,代碼還可以通過(guò)靜態(tài)方法引用來(lái)表示:
五君账、Lambda 作用域繁堡,在lambda表達(dá)式中訪問(wèn)外層作用域和老版本的匿名對(duì)象中的方式很相似。你可以直接訪問(wèn)標(biāo)記了final的外層局部變量乡数,或者實(shí)例的字段以及靜態(tài)變量
六椭蹄、訪問(wèn)局部變量,我們可以直接在lambda表達(dá)式中訪問(wèn)外層的局部變量
七净赴、訪問(wèn)對(duì)象字段與靜態(tài)變量绳矩,和本地變量不同的是,lambda內(nèi)部對(duì)于實(shí)例的字段以及靜態(tài)變量是即可讀又可寫玖翅。該行為和匿名對(duì)象是一致的
八翼馆、接口Formula定義了一個(gè)默認(rèn)方法sqrt可以直接被formula的實(shí)例包括匿名對(duì)象訪問(wèn)到,但是在lambda表達(dá)式中這個(gè)是不行的
九金度、java.time下包含了一組全新的時(shí)間日期API应媚。新的日期API和開(kāi)源的Joda-Time庫(kù)差不多,但又不完全一樣
十审姓、Annotation 注解珍特,在Java 8中支持多重注解了

  • 參考網(wǎng)址

http://blog.csdn.net/vi_error/article/details/71512963

4. 設(shè)計(jì)模式:?jiǎn)卫J健⒐S模式魔吐、適配器模式扎筒、責(zé)任鏈、觀察者等等

  • 單例模式

單例模式的三種形式:懶漢式單例酬姆、餓漢式單例嗜桌、登記式單例
單例模式有以下特點(diǎn):
1、單例類只能有一個(gè)實(shí)例辞色。
2骨宠、單例類必須自己創(chuàng)建自己的唯一實(shí)例。
3相满、單例類必須給所有其他對(duì)象提供這一實(shí)例层亿。

  • 工廠模式

工廠模式主要是為創(chuàng)建對(duì)象提供過(guò)渡接口,以便將創(chuàng)建對(duì)象的具體過(guò)程屏蔽隔離起來(lái)立美,達(dá)到提高靈活性的目的

  • 適配器模式

適配器模式把一個(gè)類的接口變換成客戶端所期待的另一種接口匿又,從而使原本因接口不匹配而無(wú)法在一起工作的兩個(gè)類能夠在一起工作

  • 責(zé)任鏈

使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接受者之間的耦合關(guān)系建蹄,
將這個(gè)對(duì)象連成一條鏈碌更,并沿著這條鏈傳遞該請(qǐng)求裕偿,直到有一個(gè)對(duì)象處理他為止

  • 觀察者

在Java中通過(guò)Observable類和Observer接口實(shí)現(xiàn)了觀察者模式。一個(gè)Observer對(duì)象監(jiān)視著一個(gè)Observable對(duì)象的變化痛单,當(dāng)Observable對(duì)象發(fā)生變化時(shí)嘿棘,Observer得到通知,就可以進(jìn)行相應(yīng)的工作

5. JNI 的使用

JNI是Java Native Interface的縮寫旭绒,中文為JAVA本地調(diào)用鸟妙。使用JNI可以很方便的用我們的Java程序調(diào)用C/C++程序。很多時(shí)候快压,某些功能用Java無(wú)法實(shí)現(xiàn)圆仔,比如說(shuō)涉及到底層驅(qū)動(dòng)的一些功能,這時(shí)候我們就可以利用JNI來(lái)調(diào)用C或者C++程序來(lái)實(shí)現(xiàn)蔫劣,這就是JNI的強(qiáng)大之處坪郭。但是JNI也有它的缺點(diǎn),使用java與本地已編譯的代碼交互脉幢,通常會(huì)喪失平臺(tái)可移植性歪沃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嫌松,隨后出現(xiàn)的幾起案子沪曙,更是在濱河造成了極大的恐慌,老刑警劉巖萎羔,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件液走,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贾陷,警方通過(guò)查閱死者的電腦和手機(jī)缘眶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)髓废,“玉大人巷懈,你說(shuō)我怎么就攤上這事』藕椋” “怎么了顶燕?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)冈爹。 經(jīng)常有香客問(wèn)我涌攻,道長(zhǎng),這世上最難降的妖魔是什么频伤? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任癣漆,我火速辦了婚禮,結(jié)果婚禮上剂买,老公的妹妹穿的比我還像新娘惠爽。我一直安慰自己,他們只是感情好瞬哼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布婚肆。 她就那樣靜靜地躺著,像睡著了一般坐慰。 火紅的嫁衣襯著肌膚如雪较性。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天结胀,我揣著相機(jī)與錄音赞咙,去河邊找鬼。 笑死糟港,一個(gè)胖子當(dāng)著我的面吹牛攀操,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秸抚,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼速和,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了剥汤?” 一聲冷哼從身側(cè)響起颠放,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吭敢,沒(méi)想到半個(gè)月后碰凶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹿驼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年欲低,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蠢沿。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伸头,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舷蟀,到底是詐尸還是另有隱情恤磷,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布野宜,位于F島的核電站扫步,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匈子。R本人自食惡果不足惜河胎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虎敦。 院中可真熱鬧游岳,春花似錦政敢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至访锻,卻和暖如春褪尝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背期犬。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工河哑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人龟虎。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓璃谨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親遣总。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睬罗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345