- 相關(guān)推薦
Java語(yǔ)言的特點(diǎn)和實(shí)現(xiàn)機(jī)制
Java使得語(yǔ)言聲明不依賴于實(shí)現(xiàn)的方面。例如,Java顯式說(shuō)明每個(gè)基本數(shù)據(jù)類型的大小和它的運(yùn)算行為(這些數(shù)據(jù)類型由Java語(yǔ)法描述)。下面是小編整理的關(guān)于Java語(yǔ)言的特點(diǎn)和實(shí)現(xiàn)機(jī)制,希望大家認(rèn)真閱讀!
java語(yǔ)言定義:
Java是一種可以撰寫跨平臺(tái)應(yīng)用程序的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。
Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。
組成:
Java由四方面組成:●Java編程語(yǔ)言,即語(yǔ)法。●Java文件格式,即各種文件夾、文件的后綴!馢ava虛擬機(jī)(JVM),即處理*.class文件的解釋器!馢ava應(yīng)用程序接口(Java API)。
Java分為三個(gè)體系,分別為Java SE(J2SE,Java2 Platform Standard Edition,標(biāo)準(zhǔn)版),JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企業(yè)版),Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。
Java是功能完善的通用程序設(shè)計(jì)語(yǔ)言,可以用來(lái)開發(fā)可靠的、要求嚴(yán)格的應(yīng)用程序。
優(yōu)點(diǎn):
指針: 任何一個(gè)學(xué)過(guò)C或者C++的人都知道指針的操作對(duì)于他們是很重要的,為什么,指針能夠支持內(nèi)存的直接操作,這樣的直接操作能夠帶來(lái)的是效率上的提高.但是任何一個(gè)東西都是有副作用的,指針給程序員帶了的混亂也是無(wú)可比擬的.對(duì)于一個(gè)不是很強(qiáng)勁的C程序員而言,指針是要命的(對(duì)我而言也是,我?guī)缀醪粫?huì)寫C代碼).而JAVA就為我們省去了這樣的麻煩,或者說(shuō)JAVA完整的限制了對(duì)內(nèi)存的直接操作,讓程序員能夠安心去搞業(yè)務(wù)邏輯,而不用管自己后院的那堆內(nèi)存有沒有人來(lái)收拾.
垃圾回收: 其實(shí)垃圾回收也是JAVA對(duì)于內(nèi)存操作的限制之一,也大大解放了程序員的手腳.但是也正是這樣的一個(gè)內(nèi)存保姆的存在導(dǎo)致JAVA程序員在內(nèi)存上幾乎沒有概念...一個(gè)純粹的JAVA程序員對(duì)于內(nèi)存泄露這樣的問(wèn)題是從來(lái)沒有概念的,因?yàn)樗麖膩?lái)不用擔(dān)心,因?yàn)榇蠖鄶?shù)情況下即便他大手大腳也不會(huì)有什么問(wèn)題,這樣也就導(dǎo)致了JAVA一個(gè)很顯見的缺點(diǎn),我們后面會(huì)講到. 這里我說(shuō)點(diǎn)我想到的東西吧..其實(shí)JAVA并沒有讓程序員完全省心,他代辦的事情也僅僅是內(nèi)存罷了,其他資源的調(diào)用和釋放都還是需要程序員自己來(lái)關(guān)心的,比如數(shù)據(jù)庫(kù),比如文件.當(dāng)然了,我們不能指望什么都吃現(xiàn)成的,總有東西是要自己做的吧.
平臺(tái)無(wú)關(guān)性的真正意義在于程序的可移植性高,能夠在多個(gè)平臺(tái)平滑遷移。這點(diǎn)就特別適合網(wǎng)絡(luò)應(yīng)用。
缺點(diǎn):
1效率
這樣一個(gè)問(wèn)題伴隨著JAVA的出身,一直困擾了我們可憐的JAVA寶寶很久,雖然他在自己長(zhǎng)大成人以后不斷地修煉自己,來(lái)改變這個(gè)問(wèn)題.但是先天的就是先天的,哎.....讓我說(shuō)你什么好呢.....
1.1當(dāng)然首先就是內(nèi)存操作限制帶來(lái)安全的同時(shí)帶來(lái)的副面效果了.....
1.2 其次呢,就是面對(duì)對(duì)象的一個(gè)很重要的特點(diǎn)所帶來(lái)的——多態(tài),這個(gè)東西是娘胎里帶出來(lái)的,誰(shuí)也沒辦法,而且這個(gè)因素的“后果很嚴(yán)重”(我等下會(huì)講我們的JAVA小朋友自己跟別人學(xué)了一招來(lái)解決這個(gè)問(wèn)題)。但是不對(duì)啊,C++不也聲稱自己面對(duì)對(duì)象的嘛,這個(gè)問(wèn)題他也有,你干嗎非說(shuō)我呢?來(lái)自JAVA的聲辯。哈哈,這你就不如人C++圓滑了吧,人家的多態(tài)是編譯器編譯和連接時(shí)實(shí)現(xiàn)的,可你是運(yùn)行時(shí)實(shí)現(xiàn)的,效率問(wèn)題可見一斑了吧。
JAVA小朋友想了很久,想了一招。。。我已經(jīng)不記得他什么時(shí)候開始會(huì)這招了,但是他真的會(huì),征對(duì)一些不會(huì)變化的程序,他就讓大家可以用預(yù)編譯來(lái)實(shí)現(xiàn)。其實(shí)這個(gè)事情也是C++真正做的。但是這樣的一個(gè)解決方案就屏蔽了動(dòng)態(tài)創(chuàng)建和連接的能力。這里還需要說(shuō)明的是,這樣的方法一般都運(yùn)用在變化少而且對(duì)性能要求特別高的時(shí)候。畢竟如果不是面對(duì)大批量的處理和集中請(qǐng)求這樣的問(wèn)題,我們的硬件應(yīng)該能滿足這樣的要求。
1。3平臺(tái)無(wú)關(guān)性帶來(lái)的。由于需要平臺(tái)無(wú)關(guān),所以JAVA是不能直接調(diào)用OS的API的,JAVA需要調(diào)用自己的API來(lái)隱式地調(diào)用OS的API,大家可想而知這樣的效果。多一層調(diào)用,必然多一層代碼需要加載到棧內(nèi)了。不過(guò)這個(gè)問(wèn)題目前也有解決方案了吧。。。這個(gè)方面我不是很在行,只是看到一些資料而已,接觸太少。比如JNI(Java Native Interface)
2逆向編譯問(wèn)題
確實(shí)是第一次聽說(shuō)這樣的問(wèn)題,天啊,沒接觸的東西還真的。這里就只能套書上的話了。
由于JAVA程序是動(dòng)態(tài)連接的,從一個(gè)類到另外一個(gè)類的引用是符號(hào)化的。在靜態(tài)連接的可執(zhí)行程序中,類之間的只是直接的指針或者偏移量,。相反地,在JAVA class文件中,指向另一個(gè)類的引用通過(guò)字符串清楚地標(biāo)明了所指向的類的名字。如果引用指向一個(gè)字段的話,這個(gè)字段的名字和描述符會(huì)被詳細(xì)說(shuō)明。如果引用指向一個(gè)成員變量,這個(gè)成員變量的名字和描述符(方法的返回類型,方法參數(shù)的數(shù)量和類型)也會(huì)被詳細(xì)說(shuō)明。
這有什么關(guān)系哦。。。。不過(guò)據(jù)說(shuō)這樣就能通過(guò)逆向編譯一下子就把我原來(lái)的代碼給搞到了。。。那我寫了那么久不是太虧了嘛。。。這樣看來(lái)。。。產(chǎn)權(quán)問(wèn)題咯(呼呼,上升到法律了。。。西西,我喜歡)
3 線程調(diào)度問(wèn)題
關(guān)于線程調(diào)度,說(shuō)老實(shí)話,我在學(xué)操作系統(tǒng)的時(shí)候,所有的線程問(wèn)題都是在linux下用C去做的,原因第一是linux的線程API比較清晰,而且我受不了Windows的那些API的名構(gòu)造。第2就是因?yàn)槲矣X得Java雖然是一個(gè)總進(jìn)程下的多線程,但是線程間的調(diào)度沒有非常的清晰,相比較而言,還不如直接調(diào)用操作系統(tǒng)的線程支持呢(雖然linux對(duì)線程級(jí)別支持也不是特別好,但是畢竟不是有包支持的嘛),記得當(dāng)初的哲學(xué)家饑餓問(wèn)題我最后算是用JAVA調(diào)配出結(jié)果了,可是到最后我自己都暈了。這些都是我個(gè)人的看法,也很可能是一些偏見,至于別人書上專業(yè)的解釋是:由于為了能夠支持多種系統(tǒng)的不同的線程支持策略,JAVA只能采取這樣籠統(tǒng)而又松散的線程規(guī)范。
其實(shí)優(yōu)點(diǎn)和缺點(diǎn)是相對(duì)的,做過(guò)比較就知道,其實(shí)優(yōu)點(diǎn)和缺點(diǎn)有時(shí)候正是同一個(gè)因素帶來(lái)的.這也需要我們用唯物主義辨證原理來(lái)看待(我只是說(shuō)唯物主義,沒有國(guó)籍的那種).更多的時(shí)候我們需要在我們所需要的東西和我們?yōu)榇诵枰冻龅拇鷥r(jià)間作出正確的trade off.(操作系統(tǒng)老師最喜歡說(shuō)的詞).
優(yōu)劣勢(shì):
java優(yōu)勢(shì),是適合團(tuán)隊(duì)開發(fā),軟件工程可以相對(duì)做到規(guī)范,這是一個(gè)很難比擬的優(yōu)勢(shì)。
java劣勢(shì),是j2ee的架構(gòu)很完美,第一版軟件可以做滿意,但是很不適合互聯(lián)網(wǎng)模式的持續(xù)不斷修改。互聯(lián)網(wǎng)軟件工程管理上的不足,持續(xù)的修修補(bǔ)補(bǔ)導(dǎo)致架構(gòu)的破壞。系統(tǒng)更新需要重啟web服務(wù),很難接受。
特點(diǎn):
語(yǔ)言特點(diǎn)
Java 編程語(yǔ)言的風(fēng)格十分接近C、C++語(yǔ)言。Java是一個(gè)純粹的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它繼承了 C++語(yǔ)言面向?qū)ο蠹夹g(shù)的核心。Java舍棄了C ++語(yǔ)言中容易引起錯(cuò)誤的指針(以引用取代)、運(yùn)算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對(duì)象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂。在 Java 1.5 版本中,Java 又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長(zhǎng)參數(shù)和自動(dòng)裝/拆箱等語(yǔ)言特性。
Java 不同于一般的編譯執(zhí)行計(jì)算機(jī)語(yǔ)言和解釋執(zhí)行計(jì)算機(jī)語(yǔ)言。它首先將源代碼編譯成二進(jìn)制字節(jié)碼(bytecode),然后依賴各種不同平臺(tái)上的虛擬機(jī)來(lái)解釋執(zhí)行字節(jié)碼。從而實(shí)現(xiàn)了“一次編譯、到處執(zhí)行”的跨平臺(tái)特性。不過(guò),每次的執(zhí)行編譯后的字節(jié)碼需要消耗一定的時(shí)間,這同時(shí)也在一定程度上降低了 Java 程序的運(yùn)行效率。
主要特征
Java語(yǔ)言是簡(jiǎn)單的。Java語(yǔ)言的語(yǔ)法與C語(yǔ)言和C++語(yǔ)言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動(dòng)的強(qiáng)制類型轉(zhuǎn)換。特別地,Java語(yǔ)言不使用指針,并提供了自動(dòng)的廢料收集,使得程序員不必為內(nèi)存管理而擔(dān)憂。
Java語(yǔ)言是面向?qū)ο蟮摹ava語(yǔ)言提供類、接口和繼承等原語(yǔ),為了簡(jiǎn)單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)。Java語(yǔ)言全面支持動(dòng)態(tài)綁定,而C++語(yǔ)言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定?傊琂ava語(yǔ)言是一個(gè)純的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。
Java語(yǔ)言是分布式的。Java語(yǔ)言支持Internet應(yīng)用的開發(fā),在基本的Java應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫(kù),包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。
Java語(yǔ)言是健壯的。Java的強(qiáng)類型機(jī)制、異常處理、廢料的自動(dòng)收集等是Java程序健壯性的重要保證。對(duì)指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更具健壯性。
Java語(yǔ)言是安全的。Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊。除了Java語(yǔ)言具有的許多安全特性以外,Java對(duì)通過(guò)網(wǎng)絡(luò)下載的類具有一個(gè)安全防范機(jī)制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機(jī)制(類SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。
Java語(yǔ)言是體系結(jié)構(gòu)中立的。Java程序(后綴為java的文件)在Java平臺(tái)上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件),然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。這種途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。
Java語(yǔ)言是可移植的。這種可移植性來(lái)源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長(zhǎng)度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行環(huán)境是用ANSI C實(shí)現(xiàn)的。
Java語(yǔ)言是解釋型的。如前所述,Java程序在Java平臺(tái)上被編譯為字節(jié)碼格式,然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺(tái)中的Java解釋器對(duì)這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過(guò)程中需要的類在聯(lián)接階段被載入到運(yùn)行環(huán)境中。
Java是高性能的。與那些解釋型的高級(jí)腳本語(yǔ)言相比,Java的確是高性能的。事實(shí)上,Java的運(yùn)行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來(lái)越接近于C++。
Java語(yǔ)言是多線程的。在Java語(yǔ)言中,線程是一種特殊的對(duì)象,它必須由Thread類或其子(孫)類來(lái)創(chuàng)建。通常有兩種方法來(lái)創(chuàng)建線程:其一,使用型構(gòu)為Thread(Runnable) 的構(gòu)造子將一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象包裝成一個(gè)線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對(duì)象即為線程。值得注意的是Thread類已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線程均有它的run方法,而run方法中包含了線程所要運(yùn)行的代碼。線程的活動(dòng)由一組方法來(lái)控制。Java語(yǔ)言支持多個(gè)線程的同時(shí)執(zhí)行,并提供多線程之間的同步機(jī)制(關(guān)鍵字為synchronized)。
Java語(yǔ)言是動(dòng)態(tài)的。Java語(yǔ)言的設(shè)計(jì)目標(biāo)之一是適應(yīng)于動(dòng)態(tài)變化的環(huán)境。Java程序需要的類能夠動(dòng)態(tài)地被載入到運(yùn)行環(huán)境,也可以通過(guò)網(wǎng)絡(luò)來(lái)載入所需要的類。這也有利于軟件的升級(jí)。另外,Java中的類有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行運(yùn)行時(shí)刻的類型檢查。
Java語(yǔ)言的優(yōu)良特性使得Java應(yīng)用具有無(wú)比的健壯性和可靠性,這也減少了應(yīng)用系統(tǒng)的維護(hù)費(fèi)用。Java對(duì)對(duì)象技術(shù)的全面支持和Java平臺(tái)內(nèi)嵌的API能縮短應(yīng)用系統(tǒng)的開發(fā)時(shí)間并降低成本。Java的編譯一次,到處可運(yùn)行的特性使得它能夠提供一個(gè)隨處可用的開放結(jié)構(gòu)和在多平臺(tái)之間傳遞信息的低成本方式。特別是Java企業(yè)應(yīng)用編程接口(Java Enterprise APIs)為企業(yè)計(jì)算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫(kù)。
和C/C++的差異
熟悉C語(yǔ)言和C++語(yǔ)言的讀者一定想搞清楚這個(gè)問(wèn)題,實(shí)際上,Java確實(shí)是從C語(yǔ)言和C++語(yǔ)言繼承了許多成份,甚至可以將Java看成是類C語(yǔ)言發(fā)展和衍生的產(chǎn)物。比如Java語(yǔ)言的變量聲明,操作符形式,參數(shù)傳遞,流程控制等方面和C語(yǔ)言,C++語(yǔ)言完全相同.盡管如此,Java和C語(yǔ)言,C++語(yǔ)言又有許多差別,主要表現(xiàn)在如下幾個(gè)方面:
(1) Java中對(duì)內(nèi)存的分配是動(dòng)態(tài)的。它采用運(yùn)算符new為每個(gè)對(duì)象分配內(nèi)存空間。而且,實(shí)際內(nèi)存還會(huì)隨程序運(yùn)行情況而改變。程序運(yùn)行中 Java系統(tǒng)自動(dòng)對(duì)內(nèi)存進(jìn)行掃描,對(duì)長(zhǎng)期不用的空間作為”垃圾”進(jìn)行收集,使得系統(tǒng)資源得到更充分地利用。按照這種機(jī)制,程序員不必關(guān)注內(nèi)存管理問(wèn)題,這使Java程序的編寫變得簡(jiǎn)單明了,并且避免了由于內(nèi)存管理方面的差錯(cuò)而導(dǎo)致系統(tǒng)出問(wèn)題。而C語(yǔ)言通過(guò)malloc()和free()這兩個(gè)庫(kù)函數(shù)來(lái)分別實(shí)現(xiàn)分配內(nèi)存和釋放內(nèi)存空間的,C++語(yǔ)言中則通過(guò)運(yùn)算符operator new和operator delete來(lái)分配和釋放內(nèi)存。在C和C++中,程序員必須非常仔細(xì)地處理內(nèi)存的使用問(wèn)題。一方面,如果對(duì)己釋放的內(nèi)存再作釋放或者對(duì)未曾分配的內(nèi)存作釋放,都會(huì)造成不可預(yù)料的后果;而另一方面,如果對(duì)長(zhǎng)期不用的或不再使用的內(nèi)存不釋放,則會(huì)浪費(fèi)系統(tǒng)資源,甚至因此造成資源枯竭。
(2) Java不在所有類之外定義全局變量,而是在某個(gè)類中定義一種公用靜態(tài)的變量來(lái)完成全局變量的功能。
(3) Java不用goto語(yǔ)句,而是用try-catch-finally異常處理語(yǔ)句來(lái)代替goto語(yǔ)句處理出錯(cuò)的功能。Java中有g(shù)oto保留字,但它沒有任何效果,換句話說(shuō),我們不能使用goto來(lái)進(jìn)行跳轉(zhuǎn)到某行。實(shí)際上,結(jié)構(gòu)化程序設(shè)計(jì)完全不需要goto語(yǔ)句即可完成各種流程,而goto語(yǔ)句的使用往往會(huì)使程序的可讀性降低,所以Java不允許goto跳轉(zhuǎn),Java中的標(biāo)簽是為循環(huán)設(shè)計(jì)的是為了在多重循環(huán)中方便的使用break和coutinue而設(shè)計(jì)的。
(4) Java不支持頭文件,而C和C++語(yǔ)言中都用頭文件來(lái)聲明類、變量、函數(shù)等,這種采用頭文件的結(jié)構(gòu)使得系統(tǒng)的運(yùn)行維護(hù)相當(dāng)繁雜。
(5) Java不支持宏定義,而是使用關(guān)鍵字final來(lái)定義常量,在C/C++中可以用宏定義來(lái)實(shí)現(xiàn)常量定義,這可能有害于程序的可維護(hù)性。
(6) Java對(duì)每種數(shù)據(jù)類型都分配固定長(zhǎng)度。比如,在Java中,int類型總是32位的,而在C和C++中,對(duì)于不同的平臺(tái),同一個(gè)數(shù)據(jù)類型分配不同的字節(jié)數(shù),同樣是int類型,在PC機(jī)中為二字節(jié)即16位,而在VAX-11中,則為32位.這使得C語(yǔ)言造成不可移植性,而Java則具有跨平臺(tái)性(平臺(tái)無(wú)關(guān)性)。
(7) 類型轉(zhuǎn)換不同。在C和C++中,可通過(guò)指針進(jìn)行幾乎任意的類型轉(zhuǎn)換,常常帶來(lái)不安全性。而在Java中,運(yùn)行時(shí)系統(tǒng)對(duì)對(duì)象的處理要進(jìn)行類型相容性檢查,及早發(fā)現(xiàn)轉(zhuǎn)換錯(cuò)誤。
(8) 沒有結(jié)構(gòu)和聯(lián)合。在C和C++中,結(jié)構(gòu)和聯(lián)合的所有成員均為公有,可能造成安全性問(wèn)題。而Java中根本就不包含結(jié)構(gòu)和聯(lián)合,所有的內(nèi)容都封裝在類里面。
(9) Java不再使用指針。指針是C和C++中最靈活,也最容易產(chǎn)生錯(cuò)誤的數(shù)據(jù)類型。由指針?biāo)M(jìn)行的內(nèi)存地址操作常會(huì)造成不可預(yù)知的錯(cuò)誤,同時(shí)通過(guò)指針對(duì)某個(gè)內(nèi)存地址進(jìn)行顯式類型轉(zhuǎn)換后,可以訪問(wèn)一個(gè)C++中的私有成員,從而破壞安全性。而Java對(duì)指針進(jìn)行完全地控制,程序員不能直接進(jìn)行任何指針操作。
(10)避免運(yùn)行時(shí)平臺(tái)依賴。Java語(yǔ)言實(shí)現(xiàn)的庫(kù)可以在其它平臺(tái)的Java應(yīng)用程序中使用,而不像通常的C、C++等實(shí)現(xiàn)一樣,目標(biāo)代碼依賴于特定的硬件體系結(jié)構(gòu)乃至操作系統(tǒng)等環(huán)境。
基本概念:
final類:為防止他人從你的類上派生新類,此類是不可擴(kuò)展的。
多態(tài)類:在java中,對(duì)象變量是多態(tài)的。而java中不支持多重繼承。
抽象類:規(guī)定一個(gè)或多個(gè)抽象方法的類本身必須定義為abstract。
接口:Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。
Java中的每一個(gè)類都是從Object類擴(kuò)展而來(lái)的。
object類中的equal和toString方法。
equal用于測(cè)試一個(gè)對(duì)象是否同另一個(gè)對(duì)象相等。
toString返回一個(gè)代表該對(duì)象的字符串,每一個(gè)類都會(huì)從Object類繼承該方法,有些類重寫了該方法,以便返回當(dāng)前狀態(tài)的正確表示。
(toString 方法是一個(gè)很重要的方法)
通用編程:任何類類型的所有值都可以同object類型的變量來(lái)代替。
封裝:就是把數(shù)據(jù)和行為結(jié)合起在一個(gè)包中,并對(duì)對(duì)象使用者隱藏?cái)?shù)據(jù)的實(shí)現(xiàn)過(guò)程,一個(gè)對(duì)象中的數(shù)據(jù)叫他的實(shí)例字段(instance field)。
重載:當(dāng)多個(gè)方法具有相同的名字而含有不同的參數(shù)時(shí),便發(fā)生重載。編譯器必須挑選出調(diào)用哪個(gè)方法。
重寫:在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時(shí)子類并不想原封不動(dòng)地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。
數(shù)組列表:ArrayList動(dòng)態(tài)數(shù)組列表,是一個(gè)類庫(kù),定義在java.util包中,可自動(dòng)調(diào)節(jié)數(shù)組的大小。
class類 object類中的getclass方法返回class類型的一個(gè)實(shí)例,程序啟動(dòng)時(shí)包含在main方法的類會(huì)被加載,虛擬機(jī)要加載他需要的所有類,每一個(gè)加載的類都要加載它需要的類。
【Java語(yǔ)言的特點(diǎn)和實(shí)現(xiàn)機(jī)制】相關(guān)文章:
武術(shù)的特點(diǎn)和作用04-24
播音主持語(yǔ)言的特點(diǎn)09-01
JAVA認(rèn)證基礎(chǔ)知識(shí):基于反射機(jī)制的服務(wù)代理調(diào)用08-26
平面設(shè)計(jì)中視覺語(yǔ)言的基本要素和特點(diǎn)09-25
員工激勵(lì)機(jī)制的形式和原則07-07
播音主持的語(yǔ)言特點(diǎn)及語(yǔ)言風(fēng)格09-16
拓展訓(xùn)練的特點(diǎn)和環(huán)節(jié)05-29
擒拿的特點(diǎn)和練習(xí)要決08-14