當前位置:才華齋>IT認證>計算機等級>

Java語言的特點和實現機制

計算機等級 閲讀(1.4W)

Java使得語言聲明不依賴於實現的方面。例如,Java顯式説明每個基本數據類型的大小和它的運算行為(這些數據類型由Java語法描述)。下面是小編整理的關於Java語言的特點和實現機制,希望大家認真閲讀!

Java語言的特點和實現機制

  java語言定義:

Java是一種可以撰寫跨平台應用程序的面向對象的程序設計語言。

Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於PC、數據中心、遊戲控制枱、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社羣。

  組成:

Java由四方面組成:●Java編程語言,即語法。●Java文件格式,即各種文件夾、文件的後綴。●Java虛擬機(JVM),即處理*s文件的解釋器。●Java應用程序接口(Java API)。

Java分為三個體系,分別為Java SE(J2SE,Java2 Platform Standard Edition,標準版),JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企業版),Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。

Java是功能完善的通用程序設計語言,可以用來開發可靠的、要求嚴格的應用程序。

  優點:

指針: 任何一個學過C或者C++的人都知道指針的操作對於他們是很重要的,為什麼,指針能夠支持內存的直接操作,這樣的直接操作能夠帶來的是效率上的提高.但是任何一個東西都是有副作用的,指針給程序員帶了的混亂也是無可比擬的.對於一個不是很強勁的C程序員而言,指針是要命的(對我而言也是,我幾乎不會寫C代碼).而JAVA就為我們省去了這樣的麻煩,或者説JAVA完整的限制了對內存的直接操作,讓程序員能夠安心去搞業務邏輯,而不用管自己後院的那堆內存有沒有人來收拾.

垃圾回收: 其實垃圾回收也是JAVA對於內存操作的限制之一,也大大解放了程序員的手腳.但是也正是這樣的一個內存保姆的存在導致JAVA程序員在內存上幾乎沒有概念...一個純粹的JAVA程序員對於內存泄露這樣的問題是從來沒有概念的,因為他從來不用擔心,因為大多數情況下即便他大手大腳也不會有什麼問題,這樣也就導致了JAVA一個很顯見的缺點,我們後面會講到. 這裏我説點我想到的東西吧..其實JAVA並沒有讓程序員完全省心,他代辦的事情也僅僅是內存罷了,其他資源的調用和釋放都還是需要程序員自己來關心的,比如數據庫,比如文件.當然了,我們不能指望什麼都吃現成的,總有東西是要自己做的吧.

平台無關性的真正意義在於程序的可移植性高,能夠在多個平台平滑遷移。這點就特別適合網絡應用。

  缺點:

1效率

這樣一個問題伴隨着JAVA的出身,一直困擾了我們可憐的JAVA寶寶很久,雖然他在自己長大成人以後不斷地修煉自己,來改變這個問題.但是先天的就是先天的,哎.....讓我説你什麼好呢.....

1.1當然首先就是內存操作限制帶來安全的同時帶來的副面效果了.....

1.2 其次呢,就是面對對象的一個很重要的特點所帶來的——多態,這個東西是孃胎裏帶出來的,誰也沒辦法,而且這個因素的“後果很嚴重”(我等下會講我們的JAVA小朋友自己跟別人學了一招來解決這個問題)。但是不對啊,C++不也聲稱自己面對對象的嘛,這個問題他也有,你幹嗎非説我呢?來自JAVA的聲辯。哈哈,這你就不如人C++圓滑了吧,人家的多態是編譯器編譯和連接時實現的,可你是運行時實現的,效率問題可見一斑了吧。

JAVA小朋友想了很久,想了一招。。。我已經不記得他什麼時候開始會這招了,但是他真的會,徵對一些不會變化的程序,他就讓大家可以用預編譯來實現。其實這個事情也是C++真正做的。但是這樣的一個解決方案就屏蔽了動態創建和連接的能力。這裏還需要説明的是,這樣的方法一般都運用在變化少而且對性能要求特別高的時候。畢竟如果不是面對大批量的處理和集中請求這樣的問題,我們的硬件應該能滿足這樣的要求。

1。3平台無關性帶來的。由於需要平台無關,所以JAVA是不能直接調用OS的API的,JAVA需要調用自己的API來隱式地調用OS的API,大家可想而知這樣的效果。多一層調用,必然多一層代碼需要加載到棧內了。不過這個問題目前也有解決方案了吧。。。這個方面我不是很在行,只是看到一些資料而已,接觸太少。比如JNI(Java Native Interface)

2逆向編譯問題

確實是第一次聽説這樣的問題,天啊,沒接觸的東西還真的。這裏就只能套書上的話了。

由於JAVA程序是動態連接的,從一個類到另外一個類的引用是符號化的。在靜態連接的可執行程序中,類之間的只是直接的指針或者偏移量,。相反地,在JAVA class文件中,指向另一個類的引用通過字符串清楚地標明瞭所指向的類的名字。如果引用指向一個字段的話,這個字段的名字和描述符會被詳細説明。如果引用指向一個成員變量,這個成員變量的名字和描述符(方法的返回類型,方法參數的數量和類型)也會被詳細説明。

這有什麼關係哦。。。。不過據説這樣就能通過逆向編譯一下子就把我原來的代碼給搞到了。。。那我寫了那麼久不是太虧了嘛。。。這樣看來。。。產權問題咯(呼呼,上升到法律了。。。西西,我喜歡)

3 線程調度問題

關於線程調度,説老實話,我在學操作系統的時候,所有的線程問題都是在linux下用C去做的,原因第一是linux的線程API比較清晰,而且我受不了Windows的那些API的名構造。第2就是因為我覺得Java雖然是一個總進程下的多線程,但是線程間的調度沒有非常的清晰,相比較而言,還不如直接調用操作系統的線程支持呢(雖然linux對線程級別支持也不是特別好,但是畢竟不是有包支持的嘛),記得當初的哲學家飢餓問題我最後算是用JAVA調配出結果了,可是到最後我自己都暈了。這些都是我個人的看法,也很可能是一些偏見,至於別人書上專業的解釋是:由於為了能夠支持多種系統的不同的線程支持策略,JAVA只能採取這樣籠統而又鬆散的線程規範。

其實優點和缺點是相對的,做過比較就知道,其實優點和缺點有時候正是同一個因素帶來的.這也需要我們用唯物主義辨證原理來看待(我只是説唯物主義,沒有國籍的那種).更多的時候我們需要在我們所需要的東西和我們為此需要付出的代價間作出正確的trade off.(操作系統老師最喜歡説的詞).

  優劣勢:

java優勢,是適合團隊開發,軟件工程可以相對做到規範,這是一個很難比擬的優勢。

java劣勢,是j2ee的架構很完美,第一版軟件可以做滿意,但是很不適合互聯網模式的持續不斷修改。互聯網軟件工程管理上的不足,持續的修修補補導致架構的破壞。系統更新需要重啟web服務,很難接受。

  特點:

  語言特點

Java 編程語言的風格十分接近C、C++語言。Java是一個純粹的面向對象的`程序設計語言,它繼承了 C++語言面向對象技術的核心。Java捨棄了C ++語言中容易引起錯誤的指針(以引用取代)、運算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用於回收不再被引用的對象所佔據的內存空間,使得程序員不用再為內存管理而擔憂。在 Java 1.5 版本中,Java 又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長參數和自動裝/拆箱等語言特性。

Java 不同於一般的編譯執行計算機語言和解釋執行計算機語言。它首先將源代碼編譯成二進制字節碼(bytecode),然後依賴各種不同平台上的虛擬機來解釋執行字節碼。從而實現了“一次編譯、到處執行”的跨平台特性。不過,每次的執行編譯後的字節碼需要消耗一定的時間,這同時也在一定程度上降低了 Java 程序的運行效率。

  主要特徵

Java語言是簡單的。Java語言的語法與C語言和C++語言很接近,使得大多數程序員很容易學習和使用Java。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉換。特別地,Java語言不使用指針,並提供了自動的廢料收集,使得程序員不必為內存管理而擔憂。

Java語言是面向對象的。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,並支持類與接口之間的實現機制(關鍵字為implements)。Java語言全面支持動態綁定,而C++語言只對虛函數使用動態綁定。總之,Java語言是一個純的面向對象程序設計語言。

Java語言是分佈式的。Java語言支持Internet應用的開發,在基本的Java應用編程接口中有一個網絡應用編程接口(java net),它提供了用於網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠程方法激活)機制也是開發分佈式應用的重要手段。

Java語言是健壯的。Java的強類型機制、異常處理、廢料的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。

Java語言是安全的。Java通常被用在網絡環境中,為此,Java提供了一個安全機制以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網絡下載的類具有一個安全防範機制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節代碼檢查,並提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。