先說什麼是java
java是一種面嚮對象語言,真正的面向對象,任何函數和變量都以類(class)封裝起來
至於什麼是對象什麼是類,我就不廢話了
關於這兩個概念的解釋任何一本面嚮對象語言的教材裏面都有
知道了什麼是java,那天然就會對java能幹什麼感興趣
在說java能作什麼以前,先說java做爲一個真正面向對象語言的優勢
首先第一個,既然是真正的面向對象,那就要作到完全的封裝
這是java和c++最大的不一樣,java全部的源碼以及編譯後的文件都以類的形式存在
java沒有所謂的類外部定義,全部的函數(方法)以及變量(屬性)都必須在類內部定義
這樣就不會出現一個類被切割成這裏一塊那裏一塊的狀況,c++就能夠,不是麼?
這樣作使得整個程序的結構異常清晰,明瞭
其次第二個,最讓人歡呼雀躍的是徹底屏蔽了指針,同時引入了垃圾回收機制
任何一個寫過c/c++代碼的人,都會對內存管理深惡痛絕
由於這使得咱們不能把主要精力放在咱們關心的事情上
而須要考慮計算機內部的一些事情,做爲一個軟件工程師
我想沒有一我的願意把大量的時間花在內存管理上,畢竟咱們不是電子工程師
此時java的優點體現出來了,它徹底屏蔽了內存管理
也就是說,若是你用java寫程序,寫出來的任何一個程序內存上的開銷,都不受你控制
乍一看,彷佛你受到了束縛,但實際上不是這樣
由於雖然你的程序沒法對內存進行管理,下降了必定的速度
但你的程序會很是很是的安全,由於你沒法調用一個空指針
而不像之前寫c的時候那樣,整天由於空指針而擔驚受怕
固然,若是你深刻了解這一行,就會發現java其實也沒法保證程序不去調用空的指針
可是它會在最大程度上避免空指針的調用
這已經很好了,安全,這是java的最突出的優勢
第三個,虛擬機跨平臺,這是java最大的特色,跨平臺
可能全部人都知道windows,可是不是全部人都知道unix
和java同樣,不少人都不知道unix這種操做系統幹什麼用
我不想多說unix的應用,這不是主要,可是我要說,大部分小型機
工做站,都跑在unix一族的操做系統上,好比linux/solaris
unix比起windows有一個最顯著的特色,穩定,這就比如思科和華爲
思科的機器慢但穩定,華爲的機器快但不穩定,做爲服務器這一端來講
要的皇怯卸囁歟俏榷ǎ評nix在服務器端仍是很是有市場的
並且很重要的windows不安全,在ms的宣傳中我想全部人都不多看到安全二字
由於windows操做系統針對的是pc用戶,pc死機就死機咯,大不了重啓
瘟95最常常冒出來的就是藍屏,在服務器這一端上由於ms沒有本身的芯片
因此要作系統有些力不從心啊。扯遠了,那麼java能夠作到在windows上編譯
而後在unix上運行,這是c/c++作不到的
那麼說到這裏,java能作什麼逐漸清晰起來
剛纔說到了,java程序有一個的特色是安全
這個安全是針對你的系統來講得,系統在跑了java程序以後會特別地穩定
並且還能跨平臺,那麼很明顯,java主要應用於除了windows操做系統之外全部的平臺
好比手機,服務器
想一想看,若是你寫的程序要跑在手機上,而手機有多少款用的是windows?
就算有,那若是你用c/c++,是否是要針對每一款手機寫一套程序呢?
累死,那跨平臺的java就不用,作到編譯一次,隨時運行
一樣,在服務器這一端,若是我想給一個網絡門戶站點,好比sina
寫一個應用程序,pc的性能確定沒法知足sina這樣大站點併發數量的要求
那麼它就須要買服務器,那麼服務器ms沒有市場,並且windows很不安全
那麼十之八九會買一個sun/ibm的機器,或者hp,但無論是誰的機器
它裝的操做系統也不會是windows,由於windows太不安全了,並且多核的支持太差了
這個有空再說,那麼若是你要寫一個程序在這樣的機器上跑
難道咱們就在這個機器上作開發麼?固然不可能,通常程序員開發用的都是pc,windows
那麼該怎麼辦?寫一個程序,而後再拿到服務器上去編譯,去調試?
確定不可能,因此咱們就但願找到一個語言,編譯完生成程序以後
在pc上調試,而後直接移植到服務器上去,那麼此時,咱們就會絕不猶豫地選擇java
由於在跨平臺以及安全性來講,java永遠是第一選擇
ok,下面說java的缺點
一慢,這實際上是一種誤區,這就比如goto語句同樣
java也拋棄了指針,雖然看上去彷佛變慢了,可是在這個兩三年硬件性能就能翻番的年代
速度已經不是咱們關心的問題了,並且對於企業級的應用來講
沒有什麼比安全穩定更重要的,換句話說,咱們能夠忍受慢,可是不能忍受死機和藍屏
並且越大型的應用,這種慢的劣勢體現得越模糊
由於當系統項目越作越大,任何一個環節作很差均可能影響全局的狀況下
安全尤爲重要,並且就像goto語句同樣
這種過度追求速度的主張會給系統開發和糾錯以及維護帶來無可挽回甚至不可避免的損失
把內存交給計算機去管理吧,這種代價值得
咱們作的不是pc遊戲,不必把內存的那一點點消耗當親爹
二難看,又是一個誤區,不少人甚至拿出java swing控件畫出的界面來講
呵呵,其實java不是不能畫得好看,IDEA就是java寫的IDE,挺漂亮的
但爲何難看呢,是由於swing控件它自己就是unix時代的產物,swing控件貼近unix界面
老外看unix界面其實挺順眼的,他們就是吃unix飯長大的
而unix又是吃百家飯的,不像ms那麼惟利是圖,因此不怎麼對中國人友好
加上我國又沒有公司在作操做系統,因此看上去是不怎麼順眼
其實玩過unix的人都知道,unix對中文的支持一直不怎麼好
三我還沒想到,其餘人補充
給初學者之二:從JDK提及
在知道了java有什麼優勢,能作什麼以後
就該說一下java該如何去學了
在說java如何去學以前,有必要把java的幾個大方向作一個簡單說明
早在五年前,嗯,應該說是六年前,也就是99年的時候
sun公司作出了一個決定,將java應用平臺作一個劃分
畢竟在不一樣領域,語言應用特性是有區別的
針對不一樣領域內的應用,sun公司能夠發佈相關高端標準來統一規範代碼
這三大塊就是J2SE,J2EE以及J2ME
這個舉措今天看來無疑是很是了不得的
正是因爲此次革命性的發展,使java從一種小打小鬧遊戲性的語言
發展成爲今天企業級應用的基礎
這裏要特別說明一下J2SE J2EE J2ME中2的意思
其實2就是英文單詞to的諧音,就是to的意思
html
而不是second edition,固然java 2自己版本號就是1.2,也有點2nd edition的味道 java
說點題外的,sun公司發佈的java版本頗有意思
雖然老是寫是1.X但其實外界對這種版的說法也就是X.0
好比java 2,其實就是java 1.2
1.3其實就是3.0,1.4就是4.0,如今所說的5.0 其實就是1.5
只是之前咱們更習慣叫1.X而已
可能到了5.0之後,就全改叫X.0而不是1.X了
因此之後聽到別人說java 5.0,千萬別驚訝,其實就是1.5
在這三個J2*E中J2SE是基礎,就是java 2的標準版(java 2 standard edition)
也就是最基礎的java語言部分,不管學什麼java技術,J2SE都是必須掌握的
要使用J2SE就必須安裝JDK(java development kit)
JDK在sun公司的主頁上能夠免費下載,下載後須要安裝,具體安裝流程看教材
JDK包含有五個部分:核心API,集成API,用戶界面API,發佈技術還有java虛擬機(JVM)
先說運行環境,運行環境最主要要說的就是java虛擬機(JVM)
前面咱們說過java是跨平臺的語言,那麼如何作到跨平臺呢?畢竟每種操做系統都是不一樣的
java的設計者們提出了一個虛擬機的概念
在操做系統之上創建一個統一的平臺,這個平臺必須實現某些功能以支持程序的運行
以下圖:
-------------------------------------
| program |
-------------------------------------
| JVM |
-------------------------------------
| UNIX | Windows | Linux | Solaris |..
-------------------------------------
程序員所寫的每個程序都先運行在虛擬機上
全部操做都必須通過虛擬機才能和操做系統交互
這樣作不只統一了全部操做系統,同時也保證了操做系統的安全
要死機的話,死的是虛擬機(JVM)而操做系統並不會受此影響
而咱們所說的java運行環境指的主要是JVM,其餘的不說了,省略
下面說說JDK(java development kit)的API,其實用JDK來包括運行環境以及開發工具
我的感受是不恰當的,由於這三個單詞僅能說明開發工具,也就是幾個標準的API
而沒有讓人感受到有運行環境的意思在裏面,這是題外
那麼什麼是API?
簡單地說就是Application Programming Interface,應用程序編程接口
在java裏面,就是一些已經寫好了的類打成的包
這又要解釋什麼是類什麼是包了,簡單說一下,包就是類的集合
一個包包含零個或多個類,嗯,具體的能夠去看書
這些類是java的基礎類,經常使用的類,能夠簡單理解成java的工具集
最後說一下JDK的發佈技術,其實按個人理解,講白了就是編譯器
將.java文件轉換成.class文件的一種技術
這三部分組成了JDK,有了JDK,就能夠開發出J2SE應用軟件了
最原始的只要用一個記事本寫幾行代碼就能夠了
但通常來講咱們會使用效果比較好的開發工具,也就是IDE
在J2SE這一塊,特別推薦JCreator這款IDE
sun公司的產品,與JDK結合得幾乎是完美無缺,很是適合初學者使用
教材方面中文的推薦電子工業出版社出版的《java教程》初級與高級篇各一本
還有就是《21天學通java》雖然有人說21天系列是爛書,但我的感受
對於j2se,這本書翻譯得已經很不錯了,基本沒有什麼語法錯誤,語句也很通順
最後要說的就是《thinking in java》
這本書天然很經典,說得比較細,只是我以爲不太適合初學者,其實也不難
初學者直接看也不成問題,但我的感受仍是找本教材也就是前面推薦的兩款來看比較好
基本概念的理解仍是用教材的,畢竟thinking in java有的版本翻譯得很爛
並且我的建議仍是看原版比較好,固然這幾本都看最好了,但若是沒時間
至少精讀其中一本,而後再看其餘兩本就能夠,其實三本書內容也差很少
但看問題的角度方式以及面向的讀者也都不一樣,嗯,怎麼說呢,找適合本身的吧
最後要說的是
因爲虛擬機的存在,J2SE的大多數軟件的使用會比通常桌面軟件慢一些
效果不盡如人意,如今大概只有swing控件還在使用吧,其它沒怎麼據說
J2EE&J2ME
這是java應用的重中之重,若是想拿高薪,最好把J2EE學好
記得之前在csdn上看過一個調查,月薪上萬的程序員主要從事哪方面的工做
十個中有八個是作J2EE的,其餘兩個一個作J2ME,還有一個作嵌入式
也許有些誇張,但也從某一方面說明J2EE人才的稀缺以及應用的普遍
因此若是想學java,只精通j2se是永遠不夠的,至少還須要時間去了解其它兩個J2*E
給初學者之三:java企業級應用之硬件篇
總算講到企業級應用了,內容開始逐漸有趣起來
java企業級應用分爲硬件篇和軟件篇
重點在軟件,硬件是外延,嚴格地說與java沒有必然聯繫
可是,因爲java是網絡語言,不瞭解硬件的一些基礎知識
軟件知道再多也沒什麼用,不要上了戰場還不知道爲何而打仗
硬件是軟件的基礎,在這個前提下,有必要專門花一點點篇幅來聊一下硬件
硬件,簡單地說就是咱們實際生活中看得見摸得着的東西
也就是那些冰冷的機器,好比服務器,我的電腦還有網絡交換機,路由器等等
那麼先拋開網絡設備不談,先來講說計算機電腦的歷史
在很早很早之前,人類創造了第一臺電腦,那時候的電腦只是一臺用來計算的機器
無比大,無比重,無比傻,除了算其它屁事不會作,沒有所謂的人工智能與計算機網絡
可是總算是誕生了,雖然以今天的眼光去看那時候的機器巨傻無比
只配叫作計算器而不是電腦,沒有邏輯思惟能力,只會死算
但千里之行,始於足下,反正是造出來了
而後隨着時間的推移,製造業發展發展發展
電腦性能逐漸獲得提高,速度快了起來,成本也逐漸低了下來
因而人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計算機
人們就造出了無數臺計算機並使其成爲一種產品
逐漸應用於許多複雜計算領域,不只僅是科研,許多生產領域也開始出現計算機的影子
而後又隨着時間的推移,人們發現不可能把全部的計算機都作成一個樣子
由於各行各業對計算機性能的要求各不相同
因而開始把計算機劃分檔次,最簡單地是按照計算機的大小劃分
就是教科書上寫的大型機,中型機,小型機
//我的感受這樣分純粹扯淡,還覺得是小孩子玩球,分爲大球,中球和小球
可是無論怎樣,計算機再也不是千篇一概一個樣子了
按照性能的不一樣,在不一樣領域,出現了知足符合不一樣要求的計算機
幾乎在同時,人們也開始考慮計算機之間通信問題
人們開始考慮將不一樣的計算機鏈接起來,因而網線出現了,網絡出現了
又隨着網絡的發展,出現了一下專門爲了尋址而存在的機器
這就是路由器和交換機,而後又出現了一些公益性的組織或團體
他們制定了一系列的標準來規範以及管理咱們的網絡
因而3w出現了,計算機的網絡時代來臨了
嗯,說到這裏,計算機發展到今天的歷史大概說完了
咱們來詳細說說網絡時代的計算機以及各個硬件供應商之間的關係
前面說到了,計算機分爲大型機,中型機和小型機……
可是如今市場上沒有人這樣分,要是出去買機器,對硬件供應商說
我要買一款中型機,或者說,我要買一款小型機,硬件供應商確定會問問題
他們會問你買機器幹什麼用的?科學計算啊仍是居家用,是做服務器啊仍是圖形設計
但無論怎樣,簡單地說大中小型機已經沒有什麼意義了
咱們按照使用範疇來劃分
簡單劃分爲
服務器,工做站還有微機
服務器(server)
服務器涵蓋了幾乎全部的大型機以及大部分中型機甚至一些小型機
用通俗點話說衿骶褪悄掣齬?4小時不間斷運行提供服務的機器
好比賣飛機票(中航信),好比酒店預約(攜程)
好比提供門戶站點相關服務(sina),好比電子商務(ebay,amazon,阿里巴巴)
這些服務對機器都有一些特定的要求,尤爲強調安全和穩定
工做站(workstation)
工做站實際上是圖形工做站的簡稱,說白了,就是某種功能極其強大的計算機
用於特定領域,好比工程設計,動畫製做,科學研究等
我的電腦/微機(pc)
計算機網絡的最末端,這個應該不用我說太多了
網絡時代的pc已經普及到千家萬戶
說完了分類,咱們就來講說各個硬件供應商
首先是服務器還有工做站
這兩類硬件供應商主要是如下三家
Sun,IBM還有HP(惠普)
而後是PC
之前IBM還有PC事業部,如今被聯想吞併了(蛇吞象)
如今國際市場上有聯想和DELL(戴爾),目前戴爾仍是國際老大
還有HP康柏
而後是網絡,也就是路由器和交換機
這塊市場嘛,Cisco(思科)Brocade(博科)還有McDATA三足鼎立
內核(CPU)
PC內核
主要是AMD和Intel,前者最近與Sun公司合做,Sun也有一部分單雙核服務器用的是AMD的
服務器與工做站內核
這一塊與硬件廠商綁定
仍是Sun,IBM,HP三家本身生產
題外
在一些大型主機應用市場,好比賣飛機票
德國的漢莎,中國的中航信,香港的國泰用的都是尤利(美國的公司,英文名我忘了)
其它用的是IBM的機器,如今能作大型機的感受彷佛只有IBM能夠
尤利已經快倒了,技術太落後了,如今他們的系統仍是fortran寫的,連c都不支持
要特別說明的是,一個超大型主機而後多個小終端/pc的結構如今愈來愈沒市場了
未來的趨勢是用一整個包含多個服務器的分佈式操做系統來取代這些大型主機
由於大型主機更新換代極其困難,一旦數據量超過了主機的處理能力
那麼就要換主機,這個成本是極大的,可是若是用分佈式操做系統
那就只須要增長小服務器就好了
硬件就大概說到這裏,與大多數人沒什麼關係
由於大多數人壓根不可能進入這些硬件領域,除非作銷售
說了這麼多,只是爲了給軟件部分打基礎而已
//作嵌入式的除外
給初學者之四:java企業級應用之軟件篇
嗯,說過了硬件就該是軟件了
這篇是這個系列的重中之重
首先咱們來講說什麼是軟件,統一一下概念
所謂軟件通俗地說就是一套計算機程序
實現了某些功能的計算機程序
在很早很早之前,一臺計算機的軟件是不分層次結構的
一臺計算機只有一個系統,這個系統既是操做系統又是應用軟件,與硬件緊密綁定
後來通過許多年的發展發展發展
人們把一些與硬件緊密相連的又常常用到必不可少的功能作到一套程序中去
這一套程序就被人們稱作操做系統
另一些無關緊要的,不一樣工做適應不一樣環境的功能封裝到另一套程序中去
而這一系列程序被人們稱做應用軟件
以下圖:
-------------------------------------------
|應用軟件:falshgat/IE/realplayer/winamp..|
-------------------------------------------
|操做系統:UNIX/Windows/Linux/Solaris... |
-------------------------------------------
前一篇咱們知道,硬件分爲服務器工做站與pc
其實不管哪一種硬件的軟件,都有操做系統與應用軟件
ok,那下面咱們來談應用軟件
在如今企業級應用中,咱們的應用軟件通常分爲三層
三層分別是表示層,業務邏輯層,數據持久層
------------------------------
|表示層|業務邏輯層|數據持久層|
------------------------------
咱們來講說三層中的表明軟件linux
說點題外的,sun公司發佈的java版本頗有意思
雖然老是寫是1.X但其實外界對這種版的說法也就是X.0
好比java 2,其實就是java 1.2
1.3其實就是3.0,1.4就是4.0,如今所說的5.0 其實就是1.5
只是之前咱們更習慣叫1.X而已
可能到了5.0之後,就全改叫X.0而不是1.X了
因此之後聽到別人說java 5.0,千萬別驚訝,其實就是1.5
在這三個J2*E中J2SE是基礎,就是java 2的標準版(java 2 standard edition)
也就是最基礎的java語言部分,不管學什麼java技術,J2SE都是必須掌握的
要使用J2SE就必須安裝JDK(java development kit)
JDK在sun公司的主頁上能夠免費下載,下載後須要安裝,具體安裝流程看教材
JDK包含有五個部分:核心API,集成API,用戶界面API,發佈技術還有java虛擬機(JVM)
先說運行環境,運行環境最主要要說的就是java虛擬機(JVM)
前面咱們說過java是跨平臺的語言,那麼如何作到跨平臺呢?畢竟每種操做系統都是不一樣的
java的設計者們提出了一個虛擬機的概念
在操做系統之上創建一個統一的平臺,這個平臺必須實現某些功能以支持程序的運行
以下圖:
-------------------------------------
| program |
-------------------------------------
| JVM |
-------------------------------------
| UNIX | Windows | Linux | Solaris |..
-------------------------------------
程序員所寫的每個程序都先運行在虛擬機上
全部操做都必須通過虛擬機才能和操做系統交互
這樣作不只統一了全部操做系統,同時也保證了操做系統的安全
要死機的話,死的是虛擬機(JVM)而操做系統並不會受此影響
而咱們所說的java運行環境指的主要是JVM,其餘的不說了,省略
下面說說JDK(java development kit)的API,其實用JDK來包括運行環境以及開發工具
我的感受是不恰當的,由於這三個單詞僅能說明開發工具,也就是幾個標準的API
而沒有讓人感受到有運行環境的意思在裏面,這是題外
那麼什麼是API?
簡單地說就是Application Programming Interface,應用程序編程接口
在java裏面,就是一些已經寫好了的類打成的包
這又要解釋什麼是類什麼是包了,簡單說一下,包就是類的集合
一個包包含零個或多個類,嗯,具體的能夠去看書
這些類是java的基礎類,經常使用的類,能夠簡單理解成java的工具集
最後說一下JDK的發佈技術,其實按個人理解,講白了就是編譯器
將.java文件轉換成.class文件的一種技術
這三部分組成了JDK,有了JDK,就能夠開發出J2SE應用軟件了
最原始的只要用一個記事本寫幾行代碼就能夠了
但通常來講咱們會使用效果比較好的開發工具,也就是IDE
在J2SE這一塊,特別推薦JCreator這款IDE
sun公司的產品,與JDK結合得幾乎是完美無缺,很是適合初學者使用
教材方面中文的推薦電子工業出版社出版的《java教程》初級與高級篇各一本
還有就是《21天學通java》雖然有人說21天系列是爛書,但我的感受
對於j2se,這本書翻譯得已經很不錯了,基本沒有什麼語法錯誤,語句也很通順
最後要說的就是《thinking in java》
這本書天然很經典,說得比較細,只是我以爲不太適合初學者,其實也不難
初學者直接看也不成問題,但我的感受仍是找本教材也就是前面推薦的兩款來看比較好
基本概念的理解仍是用教材的,畢竟thinking in java有的版本翻譯得很爛
並且我的建議仍是看原版比較好,固然這幾本都看最好了,但若是沒時間
至少精讀其中一本,而後再看其餘兩本就能夠,其實三本書內容也差很少
但看問題的角度方式以及面向的讀者也都不一樣,嗯,怎麼說呢,找適合本身的吧
最後要說的是
因爲虛擬機的存在,J2SE的大多數軟件的使用會比通常桌面軟件慢一些
效果不盡如人意,如今大概只有swing控件還在使用吧,其它沒怎麼據說
J2EE&J2ME
這是java應用的重中之重,若是想拿高薪,最好把J2EE學好
記得之前在csdn上看過一個調查,月薪上萬的程序員主要從事哪方面的工做
十個中有八個是作J2EE的,其餘兩個一個作J2ME,還有一個作嵌入式
也許有些誇張,但也從某一方面說明J2EE人才的稀缺以及應用的普遍
因此若是想學java,只精通j2se是永遠不夠的,至少還須要時間去了解其它兩個J2*E
給初學者之三:java企業級應用之硬件篇
總算講到企業級應用了,內容開始逐漸有趣起來
java企業級應用分爲硬件篇和軟件篇
重點在軟件,硬件是外延,嚴格地說與java沒有必然聯繫
可是,因爲java是網絡語言,不瞭解硬件的一些基礎知識
軟件知道再多也沒什麼用,不要上了戰場還不知道爲何而打仗
硬件是軟件的基礎,在這個前提下,有必要專門花一點點篇幅來聊一下硬件
硬件,簡單地說就是咱們實際生活中看得見摸得着的東西
也就是那些冰冷的機器,好比服務器,我的電腦還有網絡交換機,路由器等等
那麼先拋開網絡設備不談,先來講說計算機電腦的歷史
在很早很早之前,人類創造了第一臺電腦,那時候的電腦只是一臺用來計算的機器
無比大,無比重,無比傻,除了算其它屁事不會作,沒有所謂的人工智能與計算機網絡
可是總算是誕生了,雖然以今天的眼光去看那時候的機器巨傻無比
只配叫作計算器而不是電腦,沒有邏輯思惟能力,只會死算
但千里之行,始於足下,反正是造出來了
而後隨着時間的推移,製造業發展發展發展
電腦性能逐漸獲得提高,速度快了起來,成本也逐漸低了下來
因而人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計算機
人們就造出了無數臺計算機並使其成爲一種產品
逐漸應用於許多複雜計算領域,不只僅是科研,許多生產領域也開始出現計算機的影子
而後又隨着時間的推移,人們發現不可能把全部的計算機都作成一個樣子
由於各行各業對計算機性能的要求各不相同
因而開始把計算機劃分檔次,最簡單地是按照計算機的大小劃分
就是教科書上寫的大型機,中型機,小型機
//我的感受這樣分純粹扯淡,還覺得是小孩子玩球,分爲大球,中球和小球
可是無論怎樣,計算機再也不是千篇一概一個樣子了
按照性能的不一樣,在不一樣領域,出現了知足符合不一樣要求的計算機
幾乎在同時,人們也開始考慮計算機之間通信問題
人們開始考慮將不一樣的計算機鏈接起來,因而網線出現了,網絡出現了
又隨着網絡的發展,出現了一下專門爲了尋址而存在的機器
這就是路由器和交換機,而後又出現了一些公益性的組織或團體
他們制定了一系列的標準來規範以及管理咱們的網絡
因而3w出現了,計算機的網絡時代來臨了
嗯,說到這裏,計算機發展到今天的歷史大概說完了
咱們來詳細說說網絡時代的計算機以及各個硬件供應商之間的關係
前面說到了,計算機分爲大型機,中型機和小型機……
可是如今市場上沒有人這樣分,要是出去買機器,對硬件供應商說
我要買一款中型機,或者說,我要買一款小型機,硬件供應商確定會問問題
他們會問你買機器幹什麼用的?科學計算啊仍是居家用,是做服務器啊仍是圖形設計
但無論怎樣,簡單地說大中小型機已經沒有什麼意義了
咱們按照使用範疇來劃分
簡單劃分爲
服務器,工做站還有微機
服務器(server)
服務器涵蓋了幾乎全部的大型機以及大部分中型機甚至一些小型機
用通俗點話說衿骶褪悄掣齬?4小時不間斷運行提供服務的機器
好比賣飛機票(中航信),好比酒店預約(攜程)
好比提供門戶站點相關服務(sina),好比電子商務(ebay,amazon,阿里巴巴)
這些服務對機器都有一些特定的要求,尤爲強調安全和穩定
工做站(workstation)
工做站實際上是圖形工做站的簡稱,說白了,就是某種功能極其強大的計算機
用於特定領域,好比工程設計,動畫製做,科學研究等
我的電腦/微機(pc)
計算機網絡的最末端,這個應該不用我說太多了
網絡時代的pc已經普及到千家萬戶
說完了分類,咱們就來講說各個硬件供應商
首先是服務器還有工做站
這兩類硬件供應商主要是如下三家
Sun,IBM還有HP(惠普)
而後是PC
之前IBM還有PC事業部,如今被聯想吞併了(蛇吞象)
如今國際市場上有聯想和DELL(戴爾),目前戴爾仍是國際老大
還有HP康柏
而後是網絡,也就是路由器和交換機
這塊市場嘛,Cisco(思科)Brocade(博科)還有McDATA三足鼎立
內核(CPU)
PC內核
主要是AMD和Intel,前者最近與Sun公司合做,Sun也有一部分單雙核服務器用的是AMD的
服務器與工做站內核
這一塊與硬件廠商綁定
仍是Sun,IBM,HP三家本身生產
題外
在一些大型主機應用市場,好比賣飛機票
德國的漢莎,中國的中航信,香港的國泰用的都是尤利(美國的公司,英文名我忘了)
其它用的是IBM的機器,如今能作大型機的感受彷佛只有IBM能夠
尤利已經快倒了,技術太落後了,如今他們的系統仍是fortran寫的,連c都不支持
要特別說明的是,一個超大型主機而後多個小終端/pc的結構如今愈來愈沒市場了
未來的趨勢是用一整個包含多個服務器的分佈式操做系統來取代這些大型主機
由於大型主機更新換代極其困難,一旦數據量超過了主機的處理能力
那麼就要換主機,這個成本是極大的,可是若是用分佈式操做系統
那就只須要增長小服務器就好了
硬件就大概說到這裏,與大多數人沒什麼關係
由於大多數人壓根不可能進入這些硬件領域,除非作銷售
說了這麼多,只是爲了給軟件部分打基礎而已
//作嵌入式的除外
給初學者之四:java企業級應用之軟件篇
嗯,說過了硬件就該是軟件了
這篇是這個系列的重中之重
首先咱們來講說什麼是軟件,統一一下概念
所謂軟件通俗地說就是一套計算機程序
實現了某些功能的計算機程序
在很早很早之前,一臺計算機的軟件是不分層次結構的
一臺計算機只有一個系統,這個系統既是操做系統又是應用軟件,與硬件緊密綁定
後來通過許多年的發展發展發展
人們把一些與硬件緊密相連的又常常用到必不可少的功能作到一套程序中去
這一套程序就被人們稱作操做系統
另一些無關緊要的,不一樣工做適應不一樣環境的功能封裝到另一套程序中去
而這一系列程序被人們稱做應用軟件
以下圖:
-------------------------------------------
|應用軟件:falshgat/IE/realplayer/winamp..|
-------------------------------------------
|操做系統:UNIX/Windows/Linux/Solaris... |
-------------------------------------------
前一篇咱們知道,硬件分爲服務器工做站與pc
其實不管哪一種硬件的軟件,都有操做系統與應用軟件
ok,那下面咱們來談應用軟件
在如今企業級應用中,咱們的應用軟件通常分爲三層
三層分別是表示層,業務邏輯層,數據持久層
------------------------------
|表示層|業務邏輯層|數據持久層|
------------------------------
咱們來講說三層中的表明軟件c++
JDBC
和數據庫的鏈接
這個嚴格說來是數據庫產商須要關心的事
關於AppServer如何與數據庫的鏈接
可是也須要開發人員作一點事,由於AppServer不知道何時組件須要用到數據庫
同時也須要開發人員告訴AppServer他們使用的是什麼數據庫,ip地址等等
JDBC就是關於這一套東東的規範
包括數據庫的產商應提供什麼樣的接口
AppServer應用服務器應該如何去鏈接
開發人員應該如何去配置這些鏈接等等
還有一些數據源,鏈接池等概念參考相關數據在此就再也不贅述
其它的規範好比JMX等確切地說與開發人員關聯並不大了
這類高級應用只對AppServer應用服務器產商重要
也再也不羅嗦了
---------
記得據說過這樣一種說法
大一時候不知道本身不知道 大二時候知道本身不知道 大三時候不知道本身知道 大四時候知道本身知道 爲何呢,由於大一時候剛進大學,什麼都不懂,很正常,你們都同樣
大二或者大三時候開始接觸知識,雖然仍是不懂,但慢慢地開始學習,開始積累
過了一段時間,知道本身知道了//也就是前一種說法的大四,後一種說法的大三
開始屁癲,開始拽得不得了,以爲本身懷才不遇,千里馬難尋伯樂的那種感受
有些人是大四畢業了之後開始拽,悟性高一點的,大三就開始拽,因人而異
這幾乎是每個初學者通過一段時間學習後的必然階段
無論如何,總之開始入門了,這也不是壞事
但最後每一個人都會知道本身不知道的,也就是後一種說法的大四階段
//前一種說法裏面的那些傢伙估計要到工做之後才能明白
由於任何一門學科都博大精深,要是能在兩三年以內就通通搞懂
那不是在吹牛就是坐井觀天,java如此,c如此,c++也是如此
那麼到了本系列的第七集,可愛的讀者應該處在什麼階段呢?
恭喜,在看完這篇文章以後,你就基本處於知道本身不知道的那種階段
離拽起來還有那麼一段距離,由於大家畢竟尚未學習和積累必定的基礎知識
可是騙騙外行,濛濛國企那些吃閒飯的管理人員問題不大
給初學者之八:java高級應用之框架篇
沒錯,我沒敲錯
之因此再也不聲稱是企業級應用而稱之爲高級應用 是由於下面要講的東西屬於純民間性質
是java具體應用的上層建築,可用可不用,沒有人強迫你用
首先給框架//framework 下一個定義
我想讀者你可能據說過.net framework這個概念
沒錯,咱們將要說的framework也和這個framework差很少
所不一樣的是.net framework的競爭對象是j2ee那一系列標準
而咱們將要說到的幾個框架則應用在j2ee的不一樣層面
單就單個框架而言,沒有.net framework管得那麼多
可是卻要比它精專多了,並且總量加起來,也遠比微軟那一套框架要普遍得多
回到正題,框架是什麼?
軟件工程之因此被叫作軟件工程就是由於有那麼一批人以爲能夠用工程學裏面
那些管理Project的方法來管理軟件從開發到維護這一系列流程
那麼在建築工程裏面框架是什麼?
如今建築多采用鋼筋混凝土結構,注意裏面一個很重要的詞彙:鋼筋
託福閱讀中曾有一題聽力就是關於鋼筋結構的誕生,在美國
恩,現代建築中多在建築起來以前,先用鋼筋搭建出一個框架出來
而後往鋼筋中間填入混凝土,從而造成一個完成的建築
而今天要說到的框架就是這麼一個東西在每個軟件中間的實現
框架就是那麼一個經過預先寫好代碼從而幫咱們創建起一個軟件結構的這麼一個東西
這裏提一下框架與規範//主要指J2ee規範也就是官方標準的區別
從某種意義上說,J2ee規範自己就是一個框架
不管是web容器也好,仍是ejb容器也好,它們都開發了一部分通用的代碼
而且幫助咱們搭建起來了一個軟件結構,咱們要作的就是往裏面填入組件
好比ejb/servlet/jsp等等
沒錯,要這麼理解也沒錯,可是爲了不混亂,咱們仍是嚴格區分開來
本文中將要提到的框架如無特別說明,就是指的是非官方標準的框架
規範是規範,而框架是創建在規範之上的一種東西
能夠說是標準的延續,或者說是民間的嘗試,總之是這麼一個非官方的東西
說到這裏順便提一下JCP組織也就是Java Community Process/Java社區
當初Sun公司在java發佈之初,爲了提倡開源和共項
同時也出於一個提出合理的標準的目的,而讓廣大的開發者參與標準的制定
而成立了這樣一個社區,如今還健在,網址是jcp.org
每個新的規範發佈以前都會在這個社區普遍討論,最終對規範的制定產生巨大的影響
其中就包括企業級的參與者,至關有名的JBoss以及我國的金碟公司都是其中的成員
下面介紹一下幾個至關著名的框架,必需要指出的是,雖然框架大多開源 但並不表明全部的框架都開源,好比.net framework,可是java框架大多數開源
言歸正傳
Struts
表示層框架,名字來源於飛機的金屬框架
可能有讀者會提問了
表示層不是客戶端麼?
沒錯,可是語言這東西,衆口爍金,別人都這麼說你就很差不這麼說了
最先表示層說的是客戶端,後來隨着時間的發展
人們也把服務器端直接與客戶端//好比IE
打交道的那部分也稱爲表示層//JSP+Servlet
那麼表示層框架是幹什麼的呢?
早先大規模應用JSP的時候,人們發現,JSP裏面充斥着邏輯代碼與數據
可讀性極差,因而人們借用很早很早之前的MVC模式的思想
把表示層組件分爲V-Viewer,也就是JSP
M-Model模型,通常來講是一個JavaBean
C-Controller控制器,通常來講是一個Servlet
全部人經過JSP和服務器打交道,發送請求,Viewer把這個請求轉發給Controller
Controller經過調用一個Model來處理該請求,而後返回數據到Viewer
這麼一個過程,從而達到數據與邏輯的剝離,加強代碼可讀性,下降維護成本
而幫助人們實現這一系列東西的就是Struts框架,就是這麼一個東西
Struts的競爭對手主要是產商們極力倡導的JSF也就是Java Server Faces
可是因爲Struts出道時間早,因此應用比較多
JSF則是產商們大力支持,前景看好
對於這一層來講,在JSP的html代碼中出現的java語句越少越好
由於java代碼越少說明頁面處理的業務邏輯越少,也越合理
這也是Struts最初的目的,記住這話
Spring 大名鼎鼎的Spring框架
有人曾說2005年一片叫春之聲,指的就是該框架
Spring起源於Rod Johnson的《Expert One-on-One J2EE Design and Development》一書
Rod Johnson認爲,J2ee裏面的那一套//尤爲是ejb
過重了,對於單機的系統來講,沒有必要使用那麼複雜的東西
因而就開始設計並引導Spring小組開發出這樣一個構架
不能不說他是個天才,由於的的確確不是全部的系統都是跨多服務器的
沒有必要把一個簡單的系統設計得那麼複雜//天才的那幾個共性又體現出來了
Spring從誕生之日起就是針對EJB的,力爭在很多應用上取代EJB
而它也確實達到了這個目的
如今包括WebLogic等主流應用服務器還有主流IDE都開始逐漸接受該框架
並提供相應支持
提到Spring就不能不說控制反轉Ioc//Inversion of Control
和依賴注射DI//Dependency Injection
什麼叫控制反轉呢?
套用好萊塢的一句名言就是:你呆着別動,到時我會找你。
什麼意思呢?就比如一個皇帝和太監
有一天皇帝想幸某個美女,因而跟太監說,今夜我要寵幸美女
皇帝每每不會告訴太監,今晚幾點會回宮,會回哪張龍牀,他只會告訴太監他要哪位美女
其它一切都交由太監去安排,到了晚上皇帝回宮時,天然會有美女出如今皇帝的龍牀上
這就是控制反轉,而把美女送到皇帝的寢宮裏面去就是注射
太監就是是框架裏面的注射控制器類BeanFactory,負責找到美女並送到龍牀上去
整個後宮能夠當作是Spring框架,美女就是Spring控制下的JavaBean
而傳統的模式就是一個飢渴男去找xj出臺
找領班,幫助給介紹一個云云,因而領班就開始給他張羅
介紹一個合適的給他,完過後,再把小姐還給領班,下次再來
這個過程當中,領班就是查詢上下文Context,領班的一個職能就是給客戶找到他們所要的小姐
這就是lookup()方法,領班手中的小姐名錄就是JNDI//Java Naming and Directory Interface
小姐就是EJB,飢渴男是客戶端,青樓是EJB容器
看到區別了麼?飢渴男去找xj出臺很麻煩,不只得找,用完後還得把小姐給還回去
而皇帝爽翻了,什麼都不用管,交給太監去處理,控制權轉移到太監手中去了
而不是皇帝,必要時候由太監給注射進去就能夠了
看到Spring的美妙了吧,Spring還提供了與多個主流框架的支持
能夠和其它開源框架集成
Hibernate
名字取材自ORM最先的一句玩笑話//ORM就是OR-Mapping
說用了ORM以後,程序員就能夠去冬眠了,而不須要操心那麼多事
這裏不得不說的是,該框架因爲作得太好,以致於被J2ee招安,成爲EJB3.0的一部分
替代原有EJB2.X裏面關於Entity Bean而成爲EJB ORM的工具
這裏解釋一下ORM//OR-Mapping
中文名對象關係映射
什麼意思呢?咱們知道傳統的數據庫都是關係型的
一條條記錄以表格的形式儲存,而表與表之間充斥着是關係/關聯
好比說一我的,名字zhaoce,性別男,年齡23那麼數據庫中是這麼儲存的
姓名 性別 年齡 zhaoce m 23 某女 f 22
而實際應用服務器中的實體都是以對象的形式存在,一個個對象
zhaoce是以這種形式存在的
Human human=new Human();
human.setName("zhaoce")
human.setSex("m");
human.setAge(23);
這樣的,那麼咱們知道,傳統的JDBC是經過一個二維字符串將數據取出
須要咱們本身將其包裝成對象,在存入的時候,咱們還須要將對象拆開
放入sql語句中//Insert into Huamn values('zhaoce','m',23)
而後執行該sql語句
太麻煩太麻煩,ORM理念的提出改變了這一切,ORM認爲,這些東西應該由框架來作
而不是程序員,程序員作他該作的,不要爲這種破事分心,還測試半天
因而就出現了Hibernate,JDO,TopLink等等,甚至.net裏面也有ADO.net
過去一段時間是Hibernate和JDO爭風,如今看來Hibernate逐漸成爲主流並被官方接納
成爲規範標準之一,替代掉原來EJB2.X的ORM EntityBean
TopLink則是Oracle公司推出和Oracle數據庫結合的一種ORM
商業用軟件,貴且複雜,不過正在逐漸開放
而象表示層同樣,這一種專門面對數據層的代碼也被稱爲數據持久層
因此數據持久層這一律念有時不只僅指代數據庫
關於ORM,最高的境界應該是在java代碼中不出現任何一句的sql語句
注意,是不包括sql語句,Hibernate的hql以及ejb的ejb-ql不算在內
至於出現不出現hql/ejb-ql等替代ql,這要視具體狀況而定,不過最好也是不出現
固然最後所說的過度理想的狀況每每不現實,總之一句話
以sql爲表明的ql/*還有hql,ejbql等*/語句在代碼中出現得越少越好
記住這話,如今未必可以理解,學了之後就懂了
這三個是目前最爲經常使用的框架 而目前光已公佈的框架就>500
還在不停增長中,不可能一一列舉,有興趣的能夠去看相應文檔 要指出的是框架不是應用程序
只是一堆組件的有序複合,應用時不能脫離於應用服務器單獨存在
給初學者之九:收尾
最後一篇介紹幾個常見的概念
設計模式
這可不只是java獨有
我看的書就是c++和smalltalk例子的
先說說什麼是設計模式
模式是什麼?模式是經驗的總結,潛規則的抽象
什麼意思呢?好比說咱們坐飛機,上飛機前須要通過幾個步驟
什麼安檢領取登機牌之類的,這一套流程能不能改呢?
能夠,但爲何幾乎全世界的航空公司登機前都是這一套流程呢?
由於航空公司通過長期實踐以後得出了一堆結論和經驗
並認爲這樣作纔是最安全,或說是最有效率的
這就是模式,模式是編程高手之間交流的橋樑
兩個編程高手經過統一命名的模式瞭解對方的思想
固然不借助模式可不能夠?固然能夠,只是模式無處不在,你不知道而已
又好比吃飯,每吃一口飯,咱們要先端碗,拿筷子,張嘴,塞飯入口,咀嚼最後吞嚥
這就是一套模式,咱們給這套模式命名爲吃飯
那麼當老爸叫吃飯的時候,咱們就能明白什麼意思
而不用老爸進來囈囈啊啊並比畫上半天,啞語也不是這麼用的
這就是模式,已知的模式有400多種//好象更多,不記得了
好比數據庫有數據庫的設計模式,編程有編程的模式等等
面向對象有經常使用的21種模式,須要掌握,主要分爲建立,行爲,結構三類
J2ee有J2ee的模式,Sun公司出了一本書叫《J2EE核心模式》能夠拿來看看
必須要指明的是,模式不是規範,好比吃飯模式
沒有人規定你吃飯非得要那麼吃,你能夠端碗,上拋,張嘴在下落後連碗一塊兒吞嚥
這也能夠,只要你願意,一樣,只要你願意,你就能夠不遵循模式
模式以外還有反模式,學模式不可定勢,不要學死,活學活用,無招勝有招纔是最高境界
JavaDoc
文檔工具,極其好用
能夠根據註釋自動生成HTML文檔
Ant
98年,有一位程序員在從歐洲飛回美國的飛機上想到了這麼一個東西
從而改變了整個世界,他的名字叫James Duncan Davidson
組織管理工具,能夠這麼描述它
好比你想在編譯以後自動再次生成JavaDoc
那麼你只須要編輯Ant腳本//對,就像Windows腳本那樣
而後批處理就能夠了,不過如今Ant已經普遍集成到IDE中去
不須要本身手動編寫,不過若是想要炫炫,聽說此招百試不爽
JUnit
測試工具,Unit家族可不僅有JUnit
還有其它版本的,這個不細說,具體實踐一下就明白了
POJO
//Plain Old Java Object
就是傳統的Java對象,也就是一個JavaBean
由虛擬機來掌握其生死
經常使用的兩個管理構架/規範是Spring和EJB容器
命名由來是某人//名字我忘了
以爲咱們使用了太多的規範,以致於咱們都忘記了純粹的java對象
以致於咱們都忽略了它的存在,因此叫了這麼一個名字
以喚醒人們的記憶,這個意義上來講EJB其實不能算是POJO
畢竟遵循了一堆的接口,可是無論怎樣,接口歸接口,仍是沒有繼承類
沒有被強加什麼//遵循能夠寫空方法假遵循
因此說仍是POJO也對
可是因爲這種東西缺少管理,不象Servlet有專門的容器管理並繼承了必定的類
而沒有管理的對象在虛擬機中是很危險的,由於垃圾回收機制各個虛擬機不一樣
並且也不怎樣,極有可能長時間不回收,這樣在企業級的應用中呢
就有可能形成內存大量被佔用從而死機,毫無疑問,這種機制須要優化
這種優化就是經過EJB容器或者Spring構架來實現
這麼作還有一個好處就是迫使程序員對每個類作封裝
強迫他作管理,以達到防止內存泄露的目的,內存泄露最常常出現的錯誤就是
引用未釋放,引用最典型體如今new這個關鍵字上,new得越多引用得越多
隨着時間地增加,有可能致使循環,不停new new new new new.....
其中哪怕只要有一個new處理不當,虛擬機沒法回收內存
那就極有可能完蛋,並且這種小bug越是在大的項目越是難以找到
有可能由於一我的而影響整個項目組,因此不妨記住個人一條經驗
好的系統框架不該該在業務邏輯流程中出現new關鍵字
如今不理解也無所謂,未來有一天會明白的
SOA
面向服務的構架
不說太多,這個屬於上上層建築
不過不妨記住個人一句話,能夠幫助理解這個概念
面向什麼就是對什麼作封裝
面向對象就是對對象作封裝
面向服務相似,剩下的靠悟性
反射
1.4新增功能,很是強大
經過反射,程序能夠解析出類自己的屬性也就是變量
//注意這裏說的屬性不是.net裏面的屬性,我不喜歡微軟造的新名詞,亂
還有行爲也就是方法,而後經過invoke()方法調用該方法
甚至能夠新增對象等,java獨創,本是其它語言所沒有的
後來被微軟抄了去,利用該功能,開源框架普遍受益並大量採用,近乎瘋狂地使用
具體就不說了,最後要指出的是,有一種說法是利用反射會下降效率
在早期的時候,的確是,如今不會了,放心使用
容器
5.0之後的版本在J2SE中都出現了容器
各位甚至能夠本身嘗試用標準庫去使用容器
推薦網站
www.javaeye.com //java視線論壇,Hibernate國內的權威
dev2dev.bea.com //bea的dev2dev社區,用WebLogic首選的好去處
www-128.ibm.com/developerworks //ibm developer works社區,ibm產品的老家
www.jdon.com //j道,Jboss國內相對討論會多一點的地方,有本身的框架
www.matrix.org.cn //matrix,有本身的框架,很清新的論壇
jcp.org //JCP,前面說到過了
sourceforge.net //開源的東西幾乎這裏均可以找到,除java外還有遊戲共享等
saloon.javaranch.com //我常去,人氣不錯
www.apache.org //阿帕奇老家
www.jboss.com //Jboss和Hibernate老家
www.springframework.org //Spring老家
www.wiki.org //很是好的百科站點,惋惜國內被封,創始人加入了Eclipse zone
www.google.com //你要的這裏有,不信?輸入關鍵字再按一下那個靠左的白色按鈕試試
書籍
《Thinking in Java》 //實話說,通常,尤爲是翻譯後的版本,原版還行
《Java教程》 //電子工業出版社出版的那本,上下冊,很厚,但翻譯得不錯
《21天學通Java》 //入門極好,可是《21天學通j2ee》極爛,不要買
《Mastering EJB》 //翻譯過的書質量我不清楚,估計不怎樣,請看原版書籍
《精通Hibernate》 //看清楚做者,孫衛琴,其它人的別買
其它的能夠不用了,網絡上的遠比書上來得多,來得好,雖然也來得雜 程序員