版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 .引言Java程序設(shè)計(jì)已在很多院校中被列為運(yùn)算機(jī)專業(yè)教學(xué)體系中一門重要的竹干課。在眾多運(yùn) 算機(jī)程序設(shè)計(jì)i吾言中,Java語(yǔ)言充分表現(xiàn)出了面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的眾多特點(diǎn)口。因此, 如何教好、學(xué)好該語(yǔ)言,通過(guò)Java語(yǔ)言明白得、把握面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的精華,并能靈活運(yùn) 用去解決實(shí)際問(wèn)題,便成了運(yùn)算機(jī)教學(xué)中一個(gè)研究的熱點(diǎn)。垃圾搜集機(jī)制是Java的一項(xiàng)關(guān)鍵技術(shù),用于動(dòng)態(tài)存儲(chǔ)治理,自動(dòng)地釋放再也不被程序引用的 對(duì)象,依照特定的垃圾搜集算法來(lái)實(shí)現(xiàn)資源自動(dòng)回收的功能。正因?yàn)镴ava中的垃圾搜集機(jī)制 復(fù)雜而特殊,涉及到的多是內(nèi)存治理問(wèn)題,這使它成為Jav以介紹面向?qū)ο缶幊痰拇篌w概念、 大體理論為重點(diǎn),結(jié)
2、合Java語(yǔ)言的語(yǔ)法規(guī)那么、編程特點(diǎn)和設(shè)計(jì)思想、強(qiáng)調(diào)容易發(fā)生錯(cuò)誤 和編程應(yīng)注意的地址,使學(xué)生能對(duì)Java技術(shù)有一個(gè)整體了解,通過(guò)本課程學(xué)習(xí),使學(xué)生把 握J(rèn)ava語(yǔ)言的基礎(chǔ)知識(shí),明白得和把握而向?qū)ο蟪绦蛟O(shè)計(jì)的大體思想,熟練地利用Java 語(yǔ)言進(jìn)行程序的編寫、編譯和調(diào)試工作a教學(xué)中的重點(diǎn)和難點(diǎn)。本人將結(jié)合自己的教學(xué)體會(huì), 對(duì)該部份的教學(xué)進(jìn)行一些探討。2 .與C+比較來(lái)明白得垃圾搜集器的作用對(duì)照學(xué)習(xí)是一種專門好的學(xué)習(xí)方式。能夠去明白得隱藏在語(yǔ)言背后的設(shè)計(jì)哲理,讓咱們更好 地把握編程語(yǔ)言的精華。C、C+在我校是Java的先修課程,在內(nèi)存治理方面與Java語(yǔ)言作 對(duì)照去明白得垃圾搜集機(jī)制的問(wèn)題能收到較好
3、的成效。在C+程序設(shè)計(jì)語(yǔ)言中,不管是對(duì)象仍是動(dòng)態(tài)配置的資源或內(nèi)存,都必需由程序員自行聲明 產(chǎn)生和回收。假設(shè)程序?yàn)槟硞€(gè)變量分派了內(nèi)存,但變量利用完以后卻沒(méi)有相應(yīng)執(zhí)行內(nèi)存釋放 操作,就會(huì)致使該變量所占用的內(nèi)存空間無(wú)法釋放,直到程序終I匕咱們稱這種無(wú)法回收的內(nèi) 存空間為內(nèi)存漏洞(Memory Leaks)”。假設(shè)應(yīng)用程序是一個(gè)不中斷地運(yùn)行的應(yīng)用系統(tǒng),產(chǎn)生 內(nèi)存漏洞的代碼被反復(fù)執(zhí)行,那么內(nèi)存漏洞將愈來(lái)愈大,直到系統(tǒng)內(nèi)存被耗盡,從而致使應(yīng)用 系統(tǒng)崩潰。內(nèi)存漏洞成為困擾C+語(yǔ)言所開發(fā)的應(yīng)用系統(tǒng)的難題。為解決此類問(wèn)題,Java提供了垃圾搜集機(jī)制,用以跟蹤正在利用的對(duì)象和發(fā)覺(jué)并回收再也不 引用的對(duì)象。在Jav
4、a程序中,內(nèi)存仍由程序動(dòng)態(tài)地分派,通過(guò)New等操作完成,但不需要治理 內(nèi)存的釋放,因?yàn)镴ava虛擬機(jī)(JVM)提供了垃圾搜集器,負(fù)責(zé)將再也不引用的對(duì)象回收,以釋 放內(nèi)存空間。3 .垃圾回收算法的沖破Java的垃圾搜集算法對(duì)應(yīng)用程序的性能有著超級(jí)重要的阻礙,有些時(shí)候乃至成為應(yīng)用程序 的性能瓶頸,因此Java學(xué)習(xí)者有必要了解這一內(nèi)部機(jī)制。SUN公司在每次發(fā)布的新版JDK中 都為其中的垃圾搜集器做了一些改良。要緊的垃圾搜集算法包括引用計(jì)數(shù)(Reference Counting)、標(biāo)記-清除(Mark-Sweep)算法、復(fù)制(Copying)算法、標(biāo)記-整理(Mark-Compact) 算法。在單位時(shí)
5、刻教學(xué)中對(duì)各個(gè)算法的分析不可能而面俱到,那個(gè)地址從三個(gè)最具代表性的 算法分析沖破:(1)引用計(jì)數(shù)算法引用計(jì)數(shù)算法的垃圾搜集策略是引用計(jì)數(shù)。每一個(gè)對(duì)象都有一個(gè)關(guān)聯(lián)的引用計(jì)數(shù),表示連接 該對(duì)象的活躍引用的數(shù)量。當(dāng)有引用連接至對(duì)象時(shí),引用計(jì)數(shù)加1,當(dāng)引用離開作用域或置為 null時(shí),引用計(jì)數(shù)減lo若是對(duì)象的引用計(jì)數(shù)是零,那么它確實(shí)是能夠回收的垃圾。這一算法 在執(zhí)行垃圾搜集任務(wù)時(shí)速度較快,但治理引用計(jì)數(shù)的開銷在整個(gè)程序生命周期中將持續(xù)存在, 且引用計(jì)數(shù)算法無(wú)法正確釋放循環(huán)引用的內(nèi)存塊。(2)復(fù)制算法復(fù)制算法把整個(gè)堆分成相等的兩塊。在任意時(shí)刻,只有其中的一塊用于分派對(duì)象,另一塊是空 的。在垃圾搜集時(shí),用
6、于分派對(duì)象的一塊稱為源塊,空的一塊稱為目的塊,所有從根對(duì)象動(dòng)身 可及的對(duì)象都從源塊拷貝到目的塊,在下一次垃圾搜集時(shí),源塊和目的塊互換。3 3) 標(biāo)記-清除算法基于標(biāo)記-清除算法的垃圾搜集器,從根開始遍歷所有可抵達(dá)的對(duì)象,標(biāo)記出可抵達(dá)對(duì)象,剩 下的確實(shí)是垃圾對(duì)象。然后就對(duì)堆進(jìn)行清除,所有無(wú)標(biāo)記的對(duì)象都作為垃圾回收并返回空閑 列表。在不同算法的討論中,重點(diǎn)是分析它們的優(yōu)缺點(diǎn),如引用計(jì)數(shù)算法最為直觀,經(jīng)常使用來(lái)講明 垃圾搜集的工作方式,專門適合教學(xué)分析Java垃圾搜集算法的入門分析,但它從未被應(yīng)用于 任何一種JVM實(shí)現(xiàn)中2。復(fù)制算法效率很高,而且不存在內(nèi)存碎片,缺點(diǎn)是被分派的內(nèi)存只有一 半是可用的,
7、一半是空閑的,長(zhǎng)壽的對(duì)象在每次搜集時(shí)都要來(lái)答復(fù)制。而標(biāo)記和清除是一種" 停止”式的垃圾搜集技術(shù),搜集暫停可能會(huì)很長(zhǎng),在清除時(shí)期整個(gè)堆都是可訪問(wèn)的,這關(guān)于可 能有頁(yè)面互換的堆的虛擬內(nèi)存系統(tǒng)有超級(jí)負(fù)面的性能阻礙,另外它還容易使堆產(chǎn)生碎片。4 .熟悉與垃圾回收有關(guān)的一些經(jīng)常使用方式Java語(yǔ)言提供了一些和垃圾回收有關(guān)的方式,以便在必要的時(shí)候能和垃圾搜集器進(jìn)行交互。 Runtime類和System類中的一些方式能夠很方便地讓你挪用垃圾搜集程序,從而使尚待進(jìn)行 的清除動(dòng)作得以執(zhí)行,也能夠讓你查詢當(dāng)前系統(tǒng)的內(nèi)存狀態(tài)情形。Runtime類中相關(guān)的方式如下:public void gc()該方式請(qǐng)求
8、虛擬機(jī)執(zhí)行無(wú)用對(duì)象的回收任務(wù),以便重用內(nèi)存資源。當(dāng)Runtime類的gc方式被 挪用執(zhí)行時(shí),也一樣不能保證垃圾會(huì)實(shí)際執(zhí)行回收動(dòng)作。public void runFinalizationO該方式請(qǐng)求虛擬機(jī)在那些不可達(dá)的對(duì)象上,挪用之前尚未執(zhí)行過(guò)的finalize方式。public long freeMemory0該方式返回系統(tǒng)中可用內(nèi)存字節(jié)數(shù)。public long totalMemoryO該方式返回系統(tǒng)中全數(shù)內(nèi)存資源字節(jié)數(shù)。在講述這些方式的進(jìn)程中,本人采納的是引導(dǎo)學(xué)生去看JDK的原始英文版幫忙文件,也專門 注意類的繼承關(guān)系及所包括的方式,也為以后的Java開發(fā)打下堅(jiān)實(shí)的基礎(chǔ)。5 .例如程序的分
9、析一個(gè)精煉適當(dāng)?shù)睦绯绦蚰芗由顚W(xué)生對(duì)Java垃圾搜集機(jī)制的明白得和直觀感覺(jué),取得較好 的課堂成效。如下而的程序:public class FinalizeTestpublic static void main(Stringargs)for(int i=0;i<10;i+)new SeedO ;)“instances are created.");Runtime rt=0;“Memory before Garbage ollection:"+()+/+();0;''instances are killed.?/);“Memory after Garbag
10、e Collection:+0+/+();(0);)class Seed static int gcount=0;)protected void finalize0throws Throwable0;fcount+;“Instance:"+()+”instances arekilled.)在該例中需要專門加以分析說(shuō)明的地址是:(Dnew Seed。;只是創(chuàng)建了一系列Seed對(duì)象,但這些對(duì)象并非被引用,一經(jīng)創(chuàng)建就成為事實(shí) 上的垃圾。(2)();請(qǐng)求垃圾回收。(3)class Seed概念了一個(gè)Seed類,當(dāng)創(chuàng)建實(shí)例、清除實(shí)例時(shí)能顯示相關(guān)的信息。(4)對(duì)象是不是被回收一樣是看不見的,但一
11、個(gè)對(duì)象的空間被回收之前總會(huì)挪用finalize方 式。在Seed類概念中重寫finalize方式時(shí)挪用了父類的finalize方式,若是不挪用父類的 finalize方式,可能對(duì)象中自己的那部份會(huì)被正確回收,而父類的那一部份卻沒(méi)回收。即便 咱們所概念的類并無(wú)繼承任何類,也要盡可能養(yǎng)成挪用父類的finalize方式的好適應(yīng)。由于 垃圾搜集程序是一個(gè)優(yōu)先級(jí)最低的線程,啟動(dòng)機(jī)會(huì)不確信,因此每次的輸出結(jié)果不必然一樣。 由結(jié)果的不確信性,教師也正好分析垃圾搜集器收回?zé)o用對(duì)象的順序并非固定,也可能臨時(shí) 不去回收。內(nèi)存資源的清除運(yùn)作在垃圾搜集器以為適合的時(shí)刻進(jìn)行,垃圾搜集器可不能做任 何對(duì)象回收順序的保證,
12、回收將以最有效的方式進(jìn)行,從而將回收的開銷降至最低。6 .結(jié)論在Java垃圾搜集機(jī)制的教學(xué)中,作者通過(guò)在內(nèi)存治理上與C+的對(duì)照、垃圾回收算法的沖破、 熟悉了與垃圾回收有關(guān)的一些經(jīng)常使用方式,再深切分析一個(gè)適當(dāng)精煉的例題,可使學(xué)生不 僅能深刻明白得垃圾搜集機(jī)制,同時(shí)提高了學(xué)生的編程能力。也表現(xiàn)了程序設(shè)計(jì)語(yǔ)言的教學(xué)中, 最重要的是讓學(xué)生通過(guò)明白得把握該語(yǔ)言的特點(diǎn),把握J(rèn)ava語(yǔ)言編程的精華。Java吸收了 C/C+的優(yōu)勢(shì)和語(yǔ)法,同時(shí)減少?gòu)?fù)雜性和奇異性,添加了平安性和可移植性.但 Java不單單是一種編程語(yǔ)言,仍是一種開發(fā)環(huán)境,一種應(yīng)用環(huán)境,一種部署環(huán)境.Java從語(yǔ) 言級(jí)提供了線程概念和壯大的網(wǎng)絡(luò)
13、功能,為操作系統(tǒng)和運(yùn)算機(jī)網(wǎng)絡(luò)等課程中理論知識(shí)的驗(yàn)證 和實(shí)踐提供了直觀有效的工具.Java擁有豐碩的技術(shù)成熟且通過(guò)大量測(cè)試的類庫(kù).在Java類 庫(kù)中,包提供了一套功能壯大的數(shù)據(jù)結(jié)構(gòu),讓您能更方便、靈活地操縱數(shù)據(jù).因?yàn)榘坏珜?經(jīng)常使用的數(shù)據(jù)結(jié)構(gòu)都概念好了,而且連各類操作都概念成了能夠直接挪用的方式.這就大 大降低數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的難度.Java適用于Web的許多特點(diǎn),例如滑底移植、平安、健壯和可擴(kuò)展等,為而向?qū)ο筌浖?作設(shè)計(jì)提供了實(shí)現(xiàn)工具和想象空間.遵循而向?qū)ο笏枷?,軟件生命周期的各個(gè)部份都將從而 向?qū)ο蟮慕嵌葎?dòng)身實(shí)現(xiàn).(Java教學(xué)中面向?qū)ο缶幊趟枷氲呐嘤┰贘ava教學(xué)內(nèi)容中涉及了面向?qū)ο蟮母?/p>
14、念和特點(diǎn),可是如何結(jié)合Java教學(xué)內(nèi)容找出而向?qū)?象技術(shù)培育的結(jié)合點(diǎn)和沖破口那么是兩邊面升華的關(guān)鍵。本文結(jié)合在Java教學(xué)進(jìn)程中的體 會(huì),提出如安在Java學(xué)習(xí)中培育學(xué)生面向?qū)ο蟮木幊趟枷?。Java教學(xué)的目的,一方面使而向?qū)ο蟮木幊碳夹g(shù)取得訓(xùn)練,另一方而,把握J(rèn)ava的編程方式, 在所有的Java教材中,都含有而向?qū)ο蟮拇篌w內(nèi)容,而在教學(xué)內(nèi)容和方式上,要把握二者之 間的滲透性和彼此作用性。(一)增強(qiáng)而向?qū)ο筇攸c(diǎn)的熟悉咱們是以面向?qū)ο蟮某绦蛟O(shè)計(jì)方式來(lái)進(jìn)行Java程序設(shè)計(jì)的,因此在Java中要以面向?qū)ο蟮?思想來(lái)分析問(wèn)題和解決問(wèn)題,第一把握面向?qū)ο蟮拇篌w概念和特點(diǎn),然后嚴(yán)格遵循面向?qū)ο?的設(shè)計(jì)思想
15、來(lái)進(jìn)行編程訓(xùn)練。從面向?qū)ο笤O(shè)計(jì)的優(yōu)勢(shì)動(dòng)身,引導(dǎo)程序設(shè)計(jì)思路:可重用性使咱 們?cè)趹?yīng)用程序中大量采納成熟的類庫(kù),從而縮短開發(fā)時(shí)刻。繼承和封裝性使咱們要分析直接 表現(xiàn)組成問(wèn)題區(qū)域的事物和這些事物間彼此聯(lián)系,易于程序的保護(hù)、更新和升級(jí)。(二)挖掘教學(xué)內(nèi)容的結(jié)合點(diǎn)在Java教學(xué)中,綜觀教學(xué)內(nèi)容,除Java的大體語(yǔ)法之外,都是以Java提供的壯大API類為要 緊學(xué)習(xí)內(nèi)容,Java類都包括在不同的包中,咱們能夠把常常應(yīng)用的字符串String類作為沖破 點(diǎn),提高學(xué)生對(duì)概念的明白得和類方式的正確利用的能力。所有語(yǔ)言中都涉及對(duì)字符串的處 置,如Delphi和C語(yǔ)言中,用函數(shù)實(shí)現(xiàn)子字符串的獲取,而在面向?qū)ο笤O(shè)計(jì)中那
16、么以類的方式 提供,對(duì)字符串對(duì)象進(jìn)行了封裝,在該類中提供了大量的方式,如charAtO. substr ()等等, 咱們把它作為成熟的類,在任何應(yīng)用程序中都能夠通過(guò)創(chuàng)建String對(duì)象而實(shí)現(xiàn)對(duì)字符串的 相關(guān)操作,咱們只關(guān)切如何正確利用該類中的方式而不關(guān)切方式的內(nèi)部實(shí)現(xiàn)進(jìn)程。通過(guò) String類的學(xué)習(xí)和比較,使學(xué)生對(duì)類封裝的實(shí)質(zhì)、類封裝的作用和意義、類的正確引用都有 一個(gè)清楚的熟悉,對(duì)后邊的學(xué)習(xí)起到拋磚引玉的作用。在String類學(xué)習(xí)的基礎(chǔ)上,后續(xù)的Java類,如線程、異樣、輸入/輸出、網(wǎng)絡(luò)編程等都是以 把握這些類的作用和技術(shù)應(yīng)用為目的的,咱們都能夠應(yīng)用系統(tǒng)提供的類而完成自己的任務(wù), 以縮短開發(fā)
17、周期,必要時(shí)咱們還能夠通過(guò)繼承等方式成立自己的類庫(kù)等,便于擴(kuò)充自己的功 能類。(三)改變觀念、轉(zhuǎn)變思路C語(yǔ)言作為基礎(chǔ)課程而第一開設(shè),它培育了學(xué)生的基礎(chǔ)編程能力,它是面向進(jìn)程的,在后續(xù)教 學(xué)上向面向?qū)ο蟮脑O(shè)計(jì)思想轉(zhuǎn)變,如C+ +、VisualC+等,一樣在Java中咱們也要進(jìn)一步轉(zhuǎn) 變?cè)O(shè)計(jì)思路,例如在求階乘值的例如中,咱們不妨打破直接解決問(wèn)題的方式,從兩種程序的設(shè) 計(jì)動(dòng)身而完成思想的轉(zhuǎn)變。一是面向進(jìn)程的實(shí)現(xiàn):在類中直接在main方式中,通過(guò)初值的設(shè) 計(jì)、結(jié)果的計(jì)算、結(jié)果的輸出來(lái)完成問(wèn)題的處置,可是這種模式是完全面向問(wèn)題而求解的, 沒(méi)有把面向?qū)ο蟮脑O(shè)計(jì)方式考慮進(jìn)去。二是以面向?qū)ο蟮膯?wèn)題分析進(jìn)行實(shí)現(xiàn)
18、:把階乘看做一 個(gè)對(duì)象,而所有階乘問(wèn)題抽象為類,該類用final修飾而不能再被繼承,除構(gòu)造方式外,運(yùn)用 方式重載機(jī)制設(shè)計(jì)兩個(gè)階乘值計(jì)算方式:非靜態(tài)不帶參數(shù)的方式和靜態(tài)帶參數(shù)的方式,如此 在應(yīng)用程序中就能夠夠通過(guò)類名或類對(duì)象兩種方式實(shí)現(xiàn)階乘值的計(jì)算,增加了類應(yīng)用的靈活 性。通過(guò)對(duì)簡(jiǎn)單問(wèn)題的分析和解決就能夠達(dá)到把握static修飾符的作用和方式重載應(yīng)用的 目的。因此,觀念的形成和體會(huì)的積存有利于面向?qū)ο缶幊碳夹g(shù)的培育。三、用面向?qū)ο蟮乃季S方式指導(dǎo)Java程序的開發(fā)很多同窗對(duì)Java的面向?qū)ο蟮奶匦宰聊チ季?,自以為有所領(lǐng)會(huì),也開始成心識(shí)地運(yùn)用OOP風(fēng) 格來(lái)寫程序,但是仍是常常會(huì)感覺(jué)不明白應(yīng)該如何提煉
19、類,而對(duì)一個(gè)具體的問(wèn)題的時(shí)候,會(huì)感 覺(jué)頭腦里千頭萬(wàn)緒的,不明白怎么下手,一不警惕,又會(huì)回到原先的思路上去。例如要實(shí)現(xiàn)如此一種功能:要發(fā)廣告郵件,廣告郵件列表存在數(shù)據(jù)庫(kù)里面。倘假設(shè)用C來(lái)寫的 話,一樣會(huì)如此試探,先把郵件內(nèi)容讀入,然后連接數(shù)據(jù)庫(kù),循環(huán)取郵件地址,挪用本機(jī)的 qmail的sendmail命令發(fā)送。然后考慮用Java來(lái)實(shí)現(xiàn),既然是OOP,就不能什么代碼都塞到 main進(jìn)程里面,于是就設(shè)計(jì)了三個(gè)類:一個(gè)類是負(fù)責(zé)讀取數(shù)據(jù)庠,取郵件地址,挪用qmail的 sendmail命令發(fā)送;一個(gè)類是讀郵件內(nèi)容,MIME編碼成HTML格式的,再加上郵件頭;一個(gè)主類 負(fù)責(zé)從命令讀參數(shù),處置命令行參數(shù),挪
20、用發(fā)email的類。把一件工作依照功能劃分為3個(gè)模 塊別離處理,每一個(gè)類完成一件模塊任務(wù)。認(rèn)真地分析一下,就會(huì)發(fā)覺(jué)如此的設(shè)計(jì)完滿是從程序員實(shí)現(xiàn) 程序功能的角度來(lái)設(shè)計(jì)的,或說(shuō),設(shè)計(jì)類的時(shí)候,是自低向上的,從機(jī)械的角度到現(xiàn)實(shí)世界的 角度來(lái)分析問(wèn)題的。因此,在設(shè)計(jì)的時(shí)候,就已經(jīng)把程序編程實(shí)現(xiàn)的細(xì)行都考慮進(jìn)去了,企圖 從底層實(shí)現(xiàn)程序如此的起點(diǎn)來(lái)達(dá)到知足現(xiàn)實(shí)世界的軟件需求的目標(biāo)。如此的分析方式實(shí)際上是不 適用于Java如此面向?qū)ο蟮木幊陶Z(yǔ)言,因?yàn)?若是改用C語(yǔ)言,封裝兩個(gè)C函數(shù),都會(huì)比Java 實(shí)現(xiàn)起來(lái)輕松得多,邏輯上也清楚得多。而向?qū)ο蟮木A在于考慮問(wèn)題的思路是從現(xiàn)實(shí)世界 的人類思維適應(yīng)動(dòng)身的,只要領(lǐng)
21、會(huì)了這一點(diǎn),就領(lǐng)會(huì)了面向?qū)ο蟮乃季S方式。舉一個(gè)超級(jí)簡(jiǎn)單 的例子:假使此刻需要寫一個(gè)網(wǎng)頁(yè)計(jì)數(shù)器,客戶訪問(wèn)一次頁(yè)面,網(wǎng)頁(yè)計(jì)數(shù)器加1,計(jì)數(shù)器是如 此來(lái)訪問(wèn)的id二XXX。后臺(tái)有一個(gè)數(shù)據(jù)庫(kù)表,保留每一個(gè)id(一個(gè)id對(duì)應(yīng)一個(gè)被統(tǒng)計(jì)訪問(wèn)次數(shù)的 頁(yè)面)的計(jì)數(shù)器當(dāng)前值,請(qǐng)求頁(yè)而一次,對(duì)應(yīng)id的計(jì)數(shù)器的字段加1(那個(gè)地址咱們忽略并發(fā) 更新數(shù)據(jù)庫(kù)表,顯現(xiàn)的表鎖定的問(wèn)題)。若是依照一樣從程序?qū)崿F(xiàn)的角度來(lái)分析,咱們會(huì)如此 考慮:第一是從HTTP GET請(qǐng)求取到id,然后依照id查數(shù)據(jù)庫(kù)表,取得某id對(duì)應(yīng)的訪問(wèn)計(jì)數(shù) 值,然后加1,更新數(shù)據(jù)庫(kù),最后向頁(yè)面顯示訪問(wèn)計(jì)數(shù)。此刻假設(shè)一個(gè)沒(méi)有程序設(shè)計(jì)體會(huì)的人, 他會(huì)如何來(lái)試探那
22、個(gè)問(wèn)題呢?他會(huì)提出什么樣的需求呢?他極可能會(huì)如此想:我需要有一個(gè)計(jì)數(shù)器,那個(gè)計(jì)數(shù)器應(yīng)該有如此的功能,刷新一次頁(yè)面,訪 問(wèn)量就會(huì)加1,另外最好還有一個(gè)計(jì)數(shù)器清0的功能,固然計(jì)數(shù)器若是有一個(gè)能夠設(shè)為任意值 的功能的話,我就能夠夠作弊了。作為一個(gè)沒(méi)有程序設(shè)計(jì)體會(huì)的人來(lái)講,他完全可不能想到對(duì)數(shù)據(jù)庫(kù)應(yīng)該如何操作,關(guān)于HTTP 變量該如何傳遞,他考慮問(wèn)題的角度確實(shí)是我有什么需求,我的業(yè)務(wù)邏輯是什么,軟件應(yīng)該有 什么功能。依照如此的思路(請(qǐng)注意,他的思路其實(shí)確實(shí)是咱們平常在生活中適應(yīng)的思維方 式),咱們明白需要有一個(gè)計(jì)數(shù)器類Counter,有一個(gè)必需的和兩個(gè)可選的方式:getCount0 lass文件),字
23、節(jié)碼是一種只有JVM才能識(shí)別的二進(jìn)制低級(jí)代碼,它與具體的 處置器無(wú)關(guān),要由安裝在OS之上的JVM說(shuō)明執(zhí)行,轉(zhuǎn)換成相應(yīng)平臺(tái)的機(jī)械碼,因此Java 是體系結(jié)構(gòu)中立和跨平臺(tái)的而C+直接被編譯成底層平臺(tái)的二進(jìn)制機(jī)器碼,由CPU執(zhí)行,是平臺(tái)相關(guān)的因此,當(dāng)解釋執(zhí)行時(shí),Java程序速度更慢Java語(yǔ)言支持多線程,允許并發(fā)線程的同步與互斥操作C+則沒(méi)有這種內(nèi)在機(jī)制可以將Java程序的內(nèi)容和結(jié)構(gòu)轉(zhuǎn)換成HTML格式的文檔JAVA和C+都是面向?qū)ο笳Z(yǔ)言。也確實(shí)是說(shuō),它們都能夠?qū)崿F(xiàn)面向?qū)ο笏枷?(封裝,繼乘,多態(tài))。而由于C+為了照顧大量的C語(yǔ)言利用者,而兼容了 C,使得自身僅僅成了帶類的C語(yǔ)言,多多少少阻礙了其面向
24、對(duì)象 的完全性! JAVA那么是完全的面向?qū)ο笳Z(yǔ)言,以介紹面向?qū)ο缶幊痰拇篌w概念、 大體理論為重點(diǎn),結(jié)合Java語(yǔ)言的語(yǔ)法規(guī)那么、編程特點(diǎn)和設(shè)計(jì)思想、強(qiáng)調(diào)容 易發(fā)生錯(cuò)誤和編程應(yīng)注意的地址,使學(xué)生能對(duì)Java技術(shù)有一個(gè)整體了解,通過(guò) 本課程學(xué)習(xí),使學(xué)生把握J(rèn)ava語(yǔ)言的基礎(chǔ)知識(shí),明白得和把握面向?qū)ο蟪绦蛟O(shè) 計(jì)的大體思想,熟練地利用Java語(yǔ)言進(jìn)行程序的編寫、編譯和調(diào)試工作它句法 更清楚,規(guī)模更小,更易學(xué)。它是在對(duì)多種程序設(shè)計(jì)語(yǔ)言進(jìn)行了深切細(xì)致研究的 基礎(chǔ)上,據(jù)棄了其他語(yǔ)言的不足的地方,從全然上解決了 C+的固有缺點(diǎn)。Java和C+的相似的地方多于不同的地方,但兩種語(yǔ)言問(wèn)幾處要緊的不同使 得Jav
25、a更易學(xué)習(xí),而且編程環(huán)境更為簡(jiǎn)單。我在那個(gè)地址不能完全列出不同的地方,僅列出比較顯著的區(qū)別:1 .指針JAVA語(yǔ)言讓編程者無(wú)法找到指針來(lái)直接訪問(wèn)內(nèi)存無(wú)指針,而且增添了自動(dòng) 的內(nèi)存治理功能,從而有效地避免了 C/C+語(yǔ)言中指針操作失誤,如野指針?biāo)斐傻南到y(tǒng)崩潰。但也不是說(shuō)JAVA沒(méi)有指針,虛擬機(jī)內(nèi)部仍是利用了指針,只 是外人不得利用罷了。這有利于Java程序的平安。2 .多重繼承C+支持多重繼承,這是C+的一個(gè)特點(diǎn),它許諾多父類派生一個(gè)類。盡管 多重繼承功能很強(qiáng),但利用復(fù)雜,而且會(huì)引發(fā)許多麻煩,編譯程序?qū)崿F(xiàn)它也很不 容易。Java不支持多重繼承,但許諾一個(gè)類繼承多個(gè)接口 (extends+imp
26、lement), 實(shí)現(xiàn)了 C+多重繼承的功能,乂幸免了 C+中的多重繼承實(shí)現(xiàn)方式帶來(lái)的諸多不 便。3 .數(shù)據(jù)類型及類Java是完全面向?qū)ο蟮恼Z(yǔ)言,所有函數(shù)和變量部必需是類的一部份。除大 體數(shù)據(jù)類型之外,其余的都作為類對(duì)象,包括數(shù)組。對(duì)象將數(shù)據(jù)和方式結(jié)合起來(lái), 把它們封裝在類中,如此每一個(gè)對(duì)象都可實(shí)現(xiàn)自己的特點(diǎn)和行為。而C+許諾將 函數(shù)和變量概念為全局的。另外,Java中取消了 C/C+中的結(jié)構(gòu)和聯(lián)合,排除 沒(méi)必要要的麻煩。4 .自動(dòng)內(nèi)存治理Java程序中所有的對(duì)象都是用new操作符成立在內(nèi)存堆棧上,那個(gè)操作符 類似于C+的new操作符。下面的語(yǔ)句由一個(gè)成立了一個(gè)類Read的對(duì)象,然后 挪用該對(duì)
27、象的work方式:Read r = new Read();0;語(yǔ)句Read r = new Read();在堆棧結(jié)構(gòu)上成立了一個(gè)Read的實(shí)例。Java 自動(dòng)進(jìn)行無(wú)用內(nèi)存回收操作,不需要程序員進(jìn)行刪除。而c十十中必需由程序貝 釋放內(nèi)存資源,增加了程序設(shè)計(jì)者的負(fù)扔。Java中當(dāng)一個(gè)對(duì)象不被再用到時(shí),無(wú)用內(nèi)存回收器將給它加上標(biāo)簽以示刪除。JAVA里無(wú)用內(nèi)存回收程序是以線程 方式在后臺(tái)運(yùn)行的,利用空閑時(shí)刻工作。5 .操作符重載Java不支持操作符重載。操作符重載被以為是c十十的突出特點(diǎn),在Java 中盡管類大體上能夠?qū)崿F(xiàn)如此的功能,但操作符重載的方便性仍然丟失了很多。 Java語(yǔ)言不支持操作符重載是為了維持Java語(yǔ)言盡可能簡(jiǎn)單。6 .預(yù)處置功能Java不支持預(yù)處置功能。c/c十十在編譯進(jìn)程中都有一個(gè)預(yù)編澤時(shí)期,即 眾所周知的預(yù)處置器。預(yù)處置器為開發(fā)人員提供了方便,但增加丁編譯的復(fù)雜性。 JAVA虛擬機(jī)沒(méi)有預(yù)處置器,但它提供的引入語(yǔ)句(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版畫廊裝飾裝修合同范本6篇
- 2024-2025學(xué)年高中語(yǔ)文第一單元?dú)v史與英雄第1課曹操獻(xiàn)刀訓(xùn)練含解析新人教版選修中國(guó)小說(shuō)欣賞
- 2024蘋果季節(jié)性收購(gòu)與加工服務(wù)合同3篇
- 2025年私人房產(chǎn)買賣合同(含合同變更程序)3篇
- 2025年度企業(yè)內(nèi)部審計(jì)與風(fēng)險(xiǎn)控制合同
- 二零二五年度科技研發(fā)中心場(chǎng)地租賃與研發(fā)成果轉(zhuǎn)化合同2篇
- 2025年度泥工施工項(xiàng)目進(jìn)度與成本控制合同
- 2024門窗購(gòu)銷及綠色建筑認(rèn)證服務(wù)合同樣本3篇
- 隨機(jī)模式設(shè)計(jì)
- 2025年新能源設(shè)備出口合同范本(含售后服務(wù))3篇
- 替格瑞洛藥物作用機(jī)制、不良反應(yīng)機(jī)制、與氯吡格雷區(qū)別和合理使用
- 河北省大學(xué)生調(diào)研河北社會(huì)調(diào)查活動(dòng)項(xiàng)目申請(qǐng)書
- GB/T 20920-2007電子水平儀
- 如何提高教師的課程領(lǐng)導(dǎo)力
- 企業(yè)人員組織結(jié)構(gòu)圖
- 日本疾病診斷分組(DPC)定額支付方式課件
- 兩段焙燒除砷技術(shù)簡(jiǎn)介 - 文字版(1)(2)課件
- 實(shí)習(xí)證明模板免費(fèi)下載【8篇】
- 復(fù)旦大學(xué)用經(jīng)濟(jì)學(xué)智慧解讀中國(guó)課件03用大歷史觀看中國(guó)社會(huì)轉(zhuǎn)型
- 案件受理登記表模版
- 最新焊接工藝評(píng)定表格
評(píng)論
0/150
提交評(píng)論