1. 程式人生 > >java語言的一些疑惑

java語言的一些疑惑

年底了,又學了一年java語言,對java這門語言理解更近了一層,當初學java語言的時候,會發現很多優點,比如人們
說的,跨平臺,自動回收垃圾,沒有指標,java語言是安全的。隨著時間的推移,我慢慢發現這些優點也是java語言的
缺點,甚至學java語言時間越久會發現自己對java語言懂得越來越少。類似懂得越多的人會發現自己懂得越來越少,呈
現反比。今天來淺析一下java語言的這些所謂的優缺點。本人菜鳥一個,不足之處望讀者留言。

java語言跨平臺,這點java語言做的非常好,95%的程式碼可以跨平臺移植,當然這裡的jre版本要一致,高版本向下兼
容。高版本開發出來的程式碼拿到低版本的環境執行,這個就不一定了。每個java的版本升級都是增加很多東西的。如果跨
平臺還要考慮專案引用路勁問題,這個有些情況需要手動修改路徑或者寫相對路徑。由於跨平臺帶來了很大方便,但是不
同平臺不同環境下作業系統效能不同,可能導致java程式碼執行結果不同,比如java內部類編譯出來的檔案是這樣的
AB

C.class。在linux/unix系統中$符號有特殊含義,在複雜情況下可能出錯。由於跨平臺,java語言浪費了一些
程式碼處理這些事情,會影響一點點效率,比如會獲取作業系統,如果是windows系統,回車換行是“\r\n”,如果是
linux/unix,回車換行是“\n”,mac作業系統是“\r”。

java語言自動垃圾回收,這個應該有很大的爭議性,這讓一些程式設計師忘記了計算機的記憶體,程式碼寫的不好和這個有些因
素。而且java語言真正做到了垃圾回收嗎?答案是否定的,很多情況下垃圾回收是無效的,依然造成記憶體洩漏,甚至這個
也影響了跨平臺,因為我遇到過一樣的作業系統一樣的程式碼一臺機器記憶體洩漏,一臺機器記憶體不洩露。java這門語言自動
回收垃圾機制是很吸引人們去學習,但是這個是優點嗎?我想這個大家未必認為全是優點,相對於手機android系統上的
應用很卡的時候,我想垃圾回收機制可能就是缺點了。java的垃圾回收解決了80%的自動回收,另外很多情況回收不了。
即使是回收了,這種機制相對於C/C++程式設計師來說,浪費了更多記憶體。這可能也是java語言在伺服器上使用更好的原因。

java語言沒有指標,我想說了以上幾點,這些不能說是java語言的優點了,只能說是特性。你可以根據一些特性和一些
需求選擇適當的程式語言,java中的指標被C/C++封裝到了jvm中去了,這讓程式設計師操作程式碼的時候簡單了一些,這個特
性優點就是吸引更多人去學習,缺點是很多時候操作不是很方便,比如我想操作記憶體棧的變數,java這門語言是執行在
jvm上面模擬的棧結構,不能操作記憶體。java語言是值傳遞的,包括物件,傳遞物件是將物件中的屬性值傳遞了,是數值
的拷貝操作。遮蔽了指標操作導致只有值傳遞。

java語言是安全的,這點我想可能是不能操作記憶體,很多人說java語言很安全,還有一個是執行在jvm上面的,安全系
數高一些。事實上java版本的木馬,病毒也是可以製作出來的,只是執行起來不如C語言的好。java框架struts2有個
很著名的漏洞,這個漏洞導致了很多大型企業的資料庫密碼洩漏,全世界損失慘重。舉個例子,通過svn漏洞上傳一段代
碼,每個公司員工都有簡單的svn賬號和弱密碼,這段程式碼有執行緒監控機制,當你的專案啟動起來的時候運行了這個線
程,執行緒裡面如果操作就看自己了,比如複製使用者資料,對作業系統進行破壞,甚至永久關機。