給初學(xué)者之一:淺談Java及應(yīng)用學(xué)java
很多人對(duì)java感到茫然,不知所措,不懂java能做什么即 便知道了java很有用,也不清楚該從哪里入手所以就有了 java入門難 這一說法ok,那我們就從java到底能做什么聊起
先說什么是java
java是一種面向?qū)ο笳Z言,真正的面向?qū)ο?,任何函?shù)和變量都以類(class)封裝起來
至于什么是對(duì)象什么是類,我就不廢話了
關(guān)于這兩個(gè)概念的解釋任何一本面向?qū)ο笳Z言的教材里面都有
知道了什么是java,那自然就會(huì)對(duì)java能干什么感興趣
在說java能做什么之前,先說java作為一個(gè)真正面向?qū)ο笳Z言的優(yōu)點(diǎn)
首先第一個(gè),既然是真正的面向?qū)ο?,那就要做到徹底的封裝
這是java和c++大的不同,java所有的源碼以及編譯后的文件都以類的形式存在
java沒有所謂的類外部定義,所有的函數(shù)(方法)以及變量(屬性)都必須在類內(nèi)部定義
這樣就不會(huì)出現(xiàn)一個(gè)類被切割成這里一塊那里一塊的情況,c++就可以,不是么?
這樣做使得整個(gè)程序的結(jié)構(gòu)異常清晰,明了
其次第二個(gè),讓人歡呼雀躍的是完全屏蔽了指針,同時(shí)引入了垃圾回收機(jī)制
任何一個(gè)寫過c/c++代碼的人,都會(huì)對(duì)內(nèi)存管理深惡痛絕
因?yàn)檫@使得我們不能把主要精力放在我們關(guān)心的事情上
而需要考慮計(jì)算機(jī)內(nèi)部的一些事情,作為一個(gè)軟件工程師
我想沒有一個(gè)人愿意把大量的時(shí)間花在內(nèi)存管理上,畢竟我們不是電子工程師
此時(shí)java的優(yōu)勢(shì)體現(xiàn)出來了,它完全屏蔽了內(nèi)存管理
也就是說,如果你用java寫程序,寫出來的任何一個(gè)程序內(nèi)存上的開銷,都不受你控制
乍一看,似乎你受到了束縛,但實(shí)際上不是這樣
因?yàn)殡m然你的程序無法對(duì)內(nèi)存進(jìn)行管理,降低了一定的速度
但你的程序會(huì)非常非常的安全,因?yàn)槟銦o法調(diào)用一個(gè)空指針
而不像以前寫c的時(shí)候那樣,成天因?yàn)榭罩羔樁鴵?dān)驚受怕
當(dāng)然,如果你深入了解這一行,就會(huì)發(fā)現(xiàn)java其實(shí)也無法保證程序不去調(diào)用空的指針
但是它會(huì)在大程度上避免空指針的調(diào)用
這已經(jīng)很好了,安全,這是java的突出的優(yōu)點(diǎn)
第三個(gè),虛擬機(jī)跨平臺(tái),這是java大的特點(diǎn),跨平臺(tái)
可能所有人都知道windows,但是不是所有人都知道unix
和java一樣,很多人都不知道unix這種操作系統(tǒng)干什么用
我不想多說unix的應(yīng)用,這不是主要,但是我要說,大部分小型機(jī)
工作站,都跑在unix一族的操作系統(tǒng)上,比如Linux/solaris
unix比起windows有一個(gè)顯著的特點(diǎn),穩(wěn)定,這就好比思科和華為
思科的機(jī)器慢但穩(wěn)定,華為的機(jī)器快但不穩(wěn)定,作為服務(wù)器這一端來說
要的皇怯卸囁歟俏榷?,所以u(píng)nix在服務(wù)器端還是非常有市場(chǎng)的
而且很重要的windows不安全,在ms的宣傳中我想所有人都很少看到安全二字
因?yàn)閣indows操作系統(tǒng)針對(duì)的是pc用戶,pc死機(jī)就死機(jī)咯,大不了重啟
瘟95經(jīng)常冒出來的就是藍(lán)屏,在服務(wù)器這一端上因?yàn)閙s沒有自己的芯片
所以要做系統(tǒng)有些力不從心啊。扯遠(yuǎn)了,那么java可以做到在windows上編譯
然后在unix上運(yùn)行,這是c/c++做不到的
那么說到這里,java能做什么逐漸清晰起來
剛才說到了,java程序有一個(gè)的特點(diǎn)是安全
這個(gè)安全是針對(duì)你的系統(tǒng)來說得,系統(tǒng)在跑了java程序之后會(huì)特別地穩(wěn)定
而且還能跨平臺(tái),那么很明顯,java主要應(yīng)用于除了windows操作系統(tǒng)以外所有的平臺(tái)
比如手機(jī),服務(wù)器
想想看,如果你寫的程序要跑在手機(jī)上,而手機(jī)有多少款用的是windows?
就算有,那如果你用c/c++,是不是要針對(duì)每一款手機(jī)寫一套程序呢?
累死,那跨平臺(tái)的java就不用,做到編譯一次,隨時(shí)運(yùn)行
同樣,在服務(wù)器這一端,如果我想給一個(gè)網(wǎng)絡(luò)門戶站點(diǎn),比如sina
寫一個(gè)應(yīng)用程序,pc的性能肯定無法滿足sina這樣大站點(diǎn)并發(fā)數(shù)量的要求
那么它就需要買服務(wù)器,那么服務(wù)器ms沒有市場(chǎng),而且windows很不安全
那么十之八九會(huì)買一個(gè)sun/ibm的機(jī)器,或者h(yuǎn)p,但不管是誰的機(jī)器
它裝的操作系統(tǒng)也不會(huì)是windows,因?yàn)閣indows太不安全了,而且多核的支持太差了
這個(gè)有空再說,那么如果你要寫一個(gè)程序在這樣的機(jī)器上跑
難道我們就在這個(gè)機(jī)器上做開發(fā)么?當(dāng)然不可能,一般程序員開發(fā)用的都是pc,windows
那么該怎么辦?寫一個(gè)程序,然后再拿到服務(wù)器上去編譯,去調(diào)試?
肯定不可能,所以我們就希望找到一個(gè)語言,編譯完生成程序之后
在pc上調(diào)試,然后直接移植到服務(wù)器上去,那么此時(shí),我們就會(huì)毫不猶豫地選擇java
因?yàn)樵诳缙脚_(tái)以及安全性來說,java永遠(yuǎn)是第一選擇
ok,下面說java的缺點(diǎn)
一慢,這其實(shí)是一種誤區(qū),這就好比goto語句一樣
java也拋棄了指針,雖然看上去似乎變慢了,但是在這個(gè)兩三年硬件性能就能翻番的年代
速度已經(jīng)不是我們關(guān)心的問題了,而且對(duì)于企業(yè)級(jí)的應(yīng)用來說
沒有什么比安全穩(wěn)定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機(jī)和藍(lán)屏
而且越大型的應(yīng)用,這種慢的劣勢(shì)體現(xiàn)得越模糊
因?yàn)楫?dāng)系統(tǒng)項(xiàng)目越做越大,任何一個(gè)環(huán)節(jié)做不好都可能影響全局的情況下
安全尤其重要,而且就像goto語句一樣
這種過分追求速度的主張會(huì)給系統(tǒng)開發(fā)和糾錯(cuò)以及維護(hù)帶來無可挽回甚至不可避免的損失
把內(nèi)存交給計(jì)算機(jī)去管理吧,這種代價(jià)值得
我們做的不是pc游戲,沒必要把內(nèi)存的那一點(diǎn)點(diǎn)消耗當(dāng)親爹
二難看,又是一個(gè)誤區(qū),很多人甚至拿出Java swing控件畫出的界面來說
呵呵,其實(shí)java不是不能畫得好看,IDEA就是java寫的IDE,挺漂亮的
但為什么難看呢,是因?yàn)閟wing控件它本身就是unix時(shí)代的產(chǎn)物,swing控件貼近unix界面
老外看unix界面其實(shí)挺順眼的,他們就是吃u(píng)nix飯長大的
而unix又是吃百家飯的,不像ms那么唯利是圖,所以不怎么對(duì)中國人友好
加上我國又沒有公司在做操作系統(tǒng),所以看上去是不怎么順眼
其實(shí)玩過unix的人都知道,unix對(duì)中文的支持一直不怎么好
三我還沒想到,其他人補(bǔ)充
給初學(xué)者之二:從JDK說起
在知道了java有什么優(yōu)點(diǎn),能做什么之后
就該說一下java該如何去學(xué)了
在說java如何去學(xué)之前,有必要把java的幾個(gè)大方向做一個(gè)簡(jiǎn)單說明
早在五年前,嗯,應(yīng)該說是六年前,也就是99年的時(shí)候
sun公司做出了一個(gè)決定,將java應(yīng)用平臺(tái)做一個(gè)劃分
畢竟在不同領(lǐng)域,語言應(yīng)用特性是有區(qū)別的
針對(duì)不同領(lǐng)域內(nèi)的應(yīng)用,sun公司可以發(fā)布相關(guān)高端標(biāo)準(zhǔn)來統(tǒng)一規(guī)范代碼
這三大塊就是J2SE,J2EE以及J2ME
這個(gè)舉措今天看來無疑是非常了不起的
正是由于這次革命性的發(fā)展,使java從一種小打小鬧游戲性的語言
發(fā)展成為今天企業(yè)級(jí)應(yīng)用的基礎(chǔ)
這里要特別說明一下J2SE J2EE J2ME中2的意思
其實(shí)2就是英文單詞to的諧音,就是to的意思
而不是second edition,當(dāng)然java 2本身版本號(hào)就是1.2,也有點(diǎn)2nd edition的味道
說點(diǎn)題外的,sun公司發(fā)布的java版本很有意思
雖然總是寫是1.X但其實(shí)外界對(duì)這種版的說法也就是X.0
比如java 2,其實(shí)就是java 1.2
1.3其實(shí)就是3.0,1.4就是4.0,現(xiàn)在所說的5.0 其實(shí)就是1.5
只是以前我們更習(xí)慣叫1.X而已
可能到了5.0以后,就全改叫X.0而不是1.X了
所以以后聽到別人說java 5.0,千萬別驚訝,其實(shí)就是1.5
在這三個(gè)J2*E中J2SE是基礎(chǔ),就是java 2的標(biāo)準(zhǔn)版(java 2 standard edition)
也就是基礎(chǔ)的java語言部分,無論學(xué)什么java技術(shù),J2SE都是必須掌握的
要使用J2SE就必須安裝JDK(java development kit)
JDK在sun公司的主頁上可以mf下載,下載后需要安裝,具體安裝流程看教材
JDK包含有五個(gè)部分:核心API,集成API,用戶界面API,發(fā)布技術(shù)還有java虛擬機(jī)(JVM)
先說運(yùn)行環(huán)境,運(yùn)行環(huán)境主要要說的就是java虛擬機(jī)(JVM)
前面我們說過java是跨平臺(tái)的語言,那么如何做到跨平臺(tái)呢?畢竟每種操作系統(tǒng)都是不同的
java的設(shè)計(jì)者們提出了一個(gè)虛擬機(jī)的概念