當前位置:才華齋>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應用設定安全哨兵。