Java : 一個帝國的誕生
## **C語言帝國的統治**
現在是公元2021年, C語言帝國已經統治了我們40多年, 實在是太久了。
1972年, 隨著C語言的誕生和Unix的問世, 帝國迅速建立統治, 從北美到歐洲, 從歐洲到亞洲, 無數程序員臣服在他的腳下。
帝國給我們提供了極好的福利:貼近硬件, 運行極快, 效率極高。
使用這些福利, 程序員們用C 開發了很多系統級軟件,操作系統, 編譯器, 數據庫,網絡系統.....
但是帝國也給我們安上了兩個沉重的枷鎖: 指針和內存管理
雖然指針無比強大, 能直接操作內存, 但是帝國卻沒有給我們工具去做越界的檢查, ?導致很多新手程序員輕易犯錯。
至于內存管理, 帝國更完全是放任的態度: 你自己分配的空間, 自己去釋放 !
更要命的是這些問題在編譯期發現不了, 在運行時才會突然暴露, 常常讓我們手忙腳亂, ?昏天黑地去調試。
我們的大量時間和寶貴的精力都被浪費在小心翼翼的處理指針和內存分配上。每個程序員都被這兩個東西搞的焦頭爛額!
帝國宣稱的可移植性騙了我們,他宣稱我們在一個機器上寫的程序, ?只要在另外一個機器上編譯就可以了, 實際上不是這樣。 他要求我們盡量用標準的C函數庫。其次,如果遇到了一些針對特定平臺的調用, 需要對每個平臺都得寫一份 ! 有一點點小錯誤,都會導致編譯失敗。
1982年,帝國又推出了一門新的語言C++, 添加了面向對象的功能,兼容C, 有靜態類型檢查, ?性能也很好。
但是這門新的語言實在是太復雜了, ?復雜到比我聰明的多的人都沒有辦法完全掌握這門語言,它的很多特性復雜的讓人吃驚。
C++在圖形領域和游戲上取得了一些成功, 但是我一直學不好它。
## **反抗**
我決定反抗這個龐大的帝國, ?我偷偷的帶領著一幫志同道合的兄弟離開了,我們要新建一塊清新自由的領地。
為了吸引更多的程序員加入我們, 我們要建立一個新的語言,這個語言應該有這樣的特性: 語法有點像C, 這樣大家容易接受
沒有C語言那樣的指針
再也不要考慮內存管理了, 實在受不了了真正的可移植性, 編寫一次, 到處運行面向對象
類型安全
還有,我們要提供一套高質量的類庫, 隨語言發行。
我想把這個語言命名為C++-- , 即C++減減, 因為我想在C++的基礎上改進,把它簡化。后來發現不行, 設計理念差別太大。
干脆重啟爐灶。
我看到門口的一棵橡樹, 就把這個語言叫做Oak。
但是后來發布的時候, 發現Oak已經被別人用了, 我們討論很久, 最終決定把這門新的語言叫做
Java。
為了實現跨平臺, 我們在操作系統和應用程序之間增加了一個抽象層: Java 虛擬機用Java寫的程序都跑在虛擬機上, 除非個別情況, 都不用看到操作系統。
## **一鳴驚人**
為了吸引更多的人加入我們的新領地, 我們決定搞一個演示, 向大家展示Java 的能力。出世未久的Java其實還遠不完善。 搞點什么好呢?
我們把眼光盯上了剛剛興起的互聯網, 1995年的網頁簡單而粗糙, 缺乏互動性。 ?于是我們在瀏覽器上弄了個小插件, 把java 運行環境放了上去。
然后在上面開發了一個圖形界面的程序(Applet), 讓它看起來美輪美奐, 震撼人心。每一個看到他的程序員都會發出“Wow”的驚嘆 !為之傾倒。
Java 活了!
通過Applet , 無數的程序員看到了Java這門語言,了解了這門語言特性以后, ?很多無法忍受C帝國暴政的程序員, 很快加入了我們, 我們的領地開始迅速擴大。
連C語言帝國里的一些商業巨頭也紛紛來和我們合作, 其中就包括Oracle , 微軟這樣的巨頭 , 微軟的頭領Bill Gates還說 :這是迄今為止設計的最好的語言!
但是Bill Gates非常的不地道, 買了我們的Java 許可以后,雖然在自家的瀏覽器上也支持Applet, 但是他們卻偷偷的試圖修改Java , 想把Java綁死在自家的操作系統上賺錢, Java會變的不可移植。
這是我們難于忍受的, 我們和微軟發起了一場曠日持久的游擊戰爭, 逼著微軟退出了Java領域,開發了自己的.NET~~~~這是后話。
## **開拓疆土**
從1995年到1997年,我們依靠 Java 不斷的攻城略地, 開拓疆土,我們王國的子民不斷增加, 達到了幾十萬之眾, 已經是一個不可忽視的力量了。
但是大家發現, Java除了Applet, 以及一些小程序之外, 似乎干不了別的事情。
C帝國的人還不斷的嘲笑我們慢, 像個玩具。
到了1998年, 經過密謀, 我們Java 王國決定派出三只軍隊向外擴展:
Java 2 標準版( J2SE): 去占領桌面Java 2 移動版( J2ME): 去占領手機Java 2 企業版( J2EE): 去占領服務器其中的兩只大軍很快敗下陣來。
J2SE的首領發現, 開發桌面應用的程序員根本接受不了Java, 雖然我們有做的很優雅的Swing可以開發界面, 但是開發出的界面非常難看, 和原生的桌面差距很大。 尤其是為了運行程序還得安裝一個虛擬機, 大家都受不了。
J2ME也是, 一直不受待見, 當然更重要的原因是喬布斯還沒有重新發明手機, ?移動互聯網還沒有啟動。
失之東隅,收之桑榆, J2EE趕上了好時候, 互聯網大發展, 大家忽然發現, Java簡直是為寫服務器端程序所發明的!
強大, 健壯, 安全, 簡單, 跨平臺 !
在J2EE規范的指導下, 特別適合團隊開發復雜的大型項目。
我們授權BEA公司第一個使用J2EE許可證, 推出了Weblogic, 憑借其集群功能, ?第一次展示了復雜應用的可擴展性和高可用性。 【三高:高可用,高性能,高并發】
這個后來被稱為中間件的東西把程序員從事務管理,安全管理,權限管理等方面解放出來, ?讓他們專注于業務開發。 這立刻捕獲了大量程序員的心。
很快Java 王國的子民就達到數百萬之眾。
榜樣的力量是無窮的, 很快其他商業巨頭也紛紛入場, 尤其是IBM,在Java ?上瘋狂投入,不僅開發了自己的應用服務器 Websphere, 還推出了Eclipse這個極具魅力的開源開發平臺。
當然IBM利用java 獲得了非常可觀的效益, 軟件+硬件+服務 三駕馬車滾滾向前, 把IBM推向了一個新的高峰。
## **帝國的誕生**
大家也沒有想到,除了商業巨頭以外, 程序員們也會對Java王國 這么熱愛, 他們基于Java開發了巨多的平臺,系統,工具,例如:
構建工具: Ant,Maven,Jekins
應用服務器: Tomcat,Jetty, Jboss, Websphere, weblogic Web開發: Struts,Spring,Hibernate, myBatis
開發工具: Eclipse, Netbean,intellij idea, Jbuilder
。。。。等等等等。。。。并且絕大部分都是開源的 !
微軟眼睜睜的看著服務器端的市場被Java 王國占據, 豈能善罷甘休? 他們趕緊推出.NET來對抗, 但我們已經不在乎了, 因為他的系統是封閉的,所有的軟件都是自家的:
開發工具是Visual Studio, 應用服務器是IIS, 數據庫是SQL ?Server,只要你用.NET基本上就會綁定微軟。
另外他們的系統只能運行在Windows服務器上, 這個服務器在高端市場的占有率實在是太低了。
2005年底, 一個新的王國突然崛起, 他們號稱開發效率比java 快5-10倍, 由此吸引了大批程序員前往加盟。
這個新的王國叫做Ruby on Rails, 它結合了PHP體系的優點(快速開發)和Java體系的優點(程序規整), 特別適合快速的開發簡單的Web網站。
雖然發展很快, 但沒有對Java 王國產生實質性的威脅, 使用Ruby on Rails搭建大型商業系統的還很少。
除了RubyonRails,還有PHP, Python, 都適合快速開發不太復雜的Web系統。 但是關鍵的,復雜的商業系統開發還是Java王國的統治之下。 所以我們和他們相安無事。
2006年, 一只叫Hadoop的軍隊讓Java王國入侵了大數據領域, 由于使用Java 語言, 絕大多數程序員在理解了Map/Reduce , 分布式文件系統在Hadoop中的實現以后, 很快就能編寫處理處理海量數據的程序, Java 王國的領地得到了極大的擴展。
2008年, 一個名叫Android 的系統橫空出世, 并且隨著移動互聯網的爆發迅速普及, 運行在Android 之上的正是Java !
Java 王國在Google的支持下, 以一種意想不到的方式占領了手機端, 完成了當年J2ME 壯志未酬的事業
!
到今年為止, 全世界估計有1000萬程序員加入了Java王國,它領土之廣泛, 實力之強大, ?是其他語言無法比擬的。
Java 占據了大部分的服務器端開發,尤其是關鍵的復雜的系統, 絕大多數的手機端, ?以及大部分的大數據領域。
一個偉大的帝國誕生了。
# **Java的特性和優勢**
### **簡單性**
就是c++語法的純凈版。沒有頭文件,指針運算,結構,聯合,操作符重載,虛基類等等。由于語法基 ?于c,因此學習起來完全不費力。
### **面向對象**
面向對象是一種程序設計技術,他將重點放在數據(即對象)和對象之間的接口上。模擬人的思維寫程 ?序,萬物皆對象!
### **可移植性****(****跨平臺性****)**
這是JAVA的一個重要的優勢。JAVA代碼或者說字節碼、二進制碼可以跨平臺的移植,而不用管具體的操 ?作系統和硬件環境。
“一次編寫,隨處運行”:“write once, run anywhere”
JAVA在設計時就很注重移植和跨平臺性。比如:JAVA的Int永遠都是32位。不像c++可能是16,32,可 ?能是根據編譯器廠商規定的變化。這樣的話程序的移植就會非常麻煩。
### **高性能**
JIT(JUSTINTIME)即時編譯。將一些“熱點”字節碼編譯成本地機器碼,并將結果緩存起來,在需要的時候重新調用。這樣的話,使JAVA程序的執行效率大大提高,某些代碼甚至接近c++的效率。隨著這種技 ?術的一天天完善,也許有一天會超越編譯代碼的效率。
### **分布式**
JAVA是為internet的分布式環境設計的,因為他能夠處理tcp/ip協議。事實上,通過url訪問一個網絡資 ?源和訪問本地文件是一樣簡單的。Java還支持遠程方法調用(RMI,remotemethodInvocation),使程序能夠通過網絡調用方法。
### **動態性**
就是在需要時將某些代碼添加到正在運行的程序中。反射機制。當需要把某些代碼添加到正在運行的程 ?序中時,動態性是一個非常重要的特性。Java的動態特性是其面向對象設計方法的擴展。它允許程序動 ?態地裝入運行過程中所需要的類,這是C++語言進行面向對象程序設計所無法實現的
### **多線程**
多線程的使用可以帶來更好的交互響應和實時行為。多線程的簡單性是Java成為主流服務器端開發語言 ?的主要原因之一。
### **安全性**
Java適合于網絡/分布式環境,為了達到這個目標,在安全性方面投入了很大的精力,使Java可以構建防 ?病毒,防篡改的系統。
### **健壯性**
Java是一種健壯的語言,吸收了C/C++語言的優點,但去掉了其影響程序健壯性的部分(如:指針、內存的申請與釋放等)。Java程序不可能造成計算機崩潰。Java系統仔細檢測對內存的每次訪問,確認它 ??是合法的,而且不致引起任何問題。不過,即使Java程序也可能有錯誤。如果出現某種出乎意料之事, ?程序也不會崩潰,而是把該例外拋棄。再通過異常處理機制,程序就會發現這類例外,并加以處理。
當然,我們學習他這門語言,最初的目的,是因為使用的人多,我們需要去掌握學習,但是當我們慢慢 ?的越來越深入的時候,你就會愛上他,發現他的無窮魅力并為之沉醉!
# **JAVA語言為什么能夠成功**
一個產品的成功和一個人的成功是一個道理。除了自身具備過硬的優勢外,還需要那么一點點狗屎運, ?甚至狗屎運非常關鍵。就是我們所講的天時地利人和。JAVA的成功除了自己具備跨平臺特性外,更重要 ?的是正好踩中了互聯網發展的節奏。微軟的成功除了windows好用外,也是正好踩中了個人電腦發展的 ?節奏。所以,我們除了自己努力外,也需要出去走走努力才踩一坨狗屎才行!
學技術,也需要知道很多事情和歷史對吧,我們來聊聊硅谷。
斯坦福大學依靠自身龐大的校區,創建了斯坦福科技園(硅谷的前身),初期采用房租免費等方式,鼓勵 ?自己的畢業生在科技園創業、鼓勵社會企業入駐。由于免費的方式再加上其他優惠的政策,吸引了大量 ?的創業者加入進來。最終大家添柴加火,造就了今天的硅谷。這才是最高明的房地產商啊!說到房地 ????產,我們現在這個社會是不是就很難受了,年薪20萬,買一套房子180萬,你算算,是不是大概下來就 ?需要十年了,你說你一個大好青年,因為一個房子,就一下變成中年大叔了!哎,人間不值得啊,所以 ?我們需要通過不斷的學習來提高自己,從而進步!讓自己的人生更有價值,而不是活著而已。
[斯坦福大學百科](https://baike.baidu.com/item/%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6/278716?fr=aladdin&6)
看著這么多的牛人,各位,是不是我們也得努努力了,少刷點抖音,少玩點王者,吃雞(玩得時候帶帶 ?我~)多跟著我敲敲代碼,沒準以后咋們的同學也能搞出一個改變世界的東西是吧。
好了,不多說話,我們先來認識一下我們即將要學習的最終要的階段,JavaSE。
# **Java三大版本**

首先,新人在剛入行的時候,不論是抱著什么目的(當然最后是因為興趣,因為興趣是一個很強的推動 力),我們要了解學習什么東西,或者說從什么東西學起 JAVA。作為一款高級程序設計語言,它的學
習難度上面,至少我認為要比C語言簡單許多,再加上如今市場對這方面的人才需求非常大,所以很多 ??人將它作為了首選。目前來說JAVA的應用比較偏向于WEB的設計,也是我們很多學習JAVA的同志,日久 ?就業的一個方向。
### **JAVA最大的特點:**
Java的主要優勢在于其做出的WORA:即一次編寫(WriteOnce)、隨處運行(RunAnywhere)。簡單來講,這意味著開發團隊能夠利用Java編寫一款應用程序,并將其編譯為可執行形式,而后將其運行 ??在任何支持Java的平臺之上。這顯然能夠極大提高編程工作的實際效率,這種優勢來源于JavaVirtual Machine(JAVA虛擬機的縮寫),JVM是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。JAVA語言的一個非常重要的特點就是與平臺的無關 ??性,而使用Java虛擬機是實現這一特點的關鍵。
### **JAVA的三大版本:**
1.JAVASE:它是JAVA的標準版,是整個JAVA的基礎和核心,這是我們主要學習的一個部分,也是JAVAEE和JAVAME技術的基礎,主要用于開發桌面應用程序。學會后可以做一些簡單的桌面應用 ?如:掃雷,連連看等。
2.JAVAME:它是JAVA的微縮版,主要應用于嵌入式開發,比如手機程序的開發。目前來說就業范圍不是很廣,在一些城市可能相對的不好找工作。
3.JAVA???EE:也叫JAVA的企業版,它提供了企業級應用開發的完整解決方案,比如開發網站,還有企業的一些應用系統,是JAVA技術應用最廣泛的領域。主要還是偏向于WEB的開發,而JAVAEE的基礎就是JAVA?SE,所以我們在學習JAVASE的時候,基礎一定要打好,因為這是最基本的,也是最核心的。
### **Java SE:**
經過這么多的介紹,相信大家已經很明白,如果學習JAVA的目的是為了就業,我們應該先學好JAVA SE,然后繼續學習JAVA ?EE。精髓在于多思考,多練習,不要怕會出錯,沒有完美的程序,都是不斷的在改進,不斷的在完善,出錯是好事,這樣你可以了解更多的異常情況和突發情況,可以為日后工作中出 ??現問題時及時解決積累足夠的經驗。
最后希望大家在學習程序開發的時候,要有一定勇于探索的精神,搞不懂的問題可以自己先思考(程序 ?開發的核心也是在于不斷思考),實在搞不懂可以在網上查詢,也可以和大家討論,但是不要太過于較 ?真,畢竟學海無涯,你永遠都學不完所有的東西,要勞逸結合,不要讓自己過于疲憊,為了學習更多的 ?東西犧牲健康,那是偉人才會做的事情,得不償失。
# **JDK** **和** **JRE**
我們回頭看看我們JavaSE的圖。

### **JDK**
Java 2 SDK (Development Kit)包含:JRE的超集,包含編譯器和調試器等用于程序開發的文件
### **JRE**
Java Runtime Environment ( JRE) 包含:Java虛擬機、庫函數、運行Java應用程序和Applet所必須文件
Java運行環境的三項主要功能:
加載代碼:由class loader 完成;
校驗代碼:由bytecode veri?er 完成;
執行代碼:由 runtime interpreter完成。
### **區別和聯系**:
sdk(也就是jdk)是jre的超集,是在jre的基礎上增加了編譯器及其他一些開發工具。
jre就是java運行時環境,包括了jvm和其它一些java核心api,任何一臺電腦,只有安裝了jre才可以運行java程序.
如果只是要運行JAVA程序,之需要JRE就可以。 JRE通常非常小,也包含了JVM.
如果要開發JAVA程序,就需要安裝JDK。
# **初識JVM**
(JAVA Virtual Machine)
JVM是一種規范,可以使用軟件來實現,也可以使用硬件來實現,就是一個虛擬的用于執行bytecodes
字節碼的計算機。他也定義了指令集、寄存器集、結構棧、垃圾收集堆、內存區域。
JVM負責將java字節碼解釋運行,邊解釋邊運行,這樣,速度就會受到一定的影響。JAVA提供了另一種 ??解釋運行的方法JIT(justintime),可以一次解釋完,再運行特定平臺上的機器碼,高級的JIT可以只能分析熱點代碼,并將這些代碼轉成本地機器碼,并將結果緩存起來,下次直接從內存中調用,這樣就大 ?大提高了執行JAVA代碼的效率。這樣就實現了跨平臺、可移植的功能。
1.JVM是指在一臺計算機上由軟件或硬件模擬的計算機;它類似一個小巧而高效的CPU。
2.byte-code代碼是與平臺無關的是虛擬機的機器指令。
3.java字節代碼運行的兩種方式:
1)方式interpreter(解釋)
2)Just-in-time(即時編譯):由代碼生成器將字節代碼轉換成本機的機器代碼,然后可以以較高速度執行。JAVA的跨平臺實現的核心是不同平臺使用不同的虛擬機
不同的操作系統有不同的虛擬機。Java ?虛擬機機制屏蔽了底層運行平臺的差別,實現了“一次編譯,隨處運行”。
### **欲工善其事必先利其器,我們先把我們的環境搭建好,才能開始咋們的征程!**
**Java開發環境搭建**
百度搜索JDK,找到下載地址,瀏覽Oracle的網站。
[JDK 下 載 地 址 :https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
1.選擇版本(我們采用JDK8)
2.同意協議(流氓協議)
3.查看電腦的環境(64位,還是32位等等)
4.下載安裝包
5.安裝JDK,JRE(改安裝目錄,注意規范,作為一個程序人,規范很重要。所以給電腦上環境單獨分類最好,)
6.配置電腦的環境變量 :
1.我的電腦\-->右鍵\--->屬性
2.環境變量\-->添加 JAVA\_HOME(JDK的安裝地址:D:Environmentjavajdk1.8.0\_201)
3.配置path:%JAVA\_HOME%bin;%JAVA\_HOME%jrebin
7.測試是否安裝成功:
1.打開cmd(命令行窗口)
2.輸出 java–version查看版本信息,是否成功輸出!
8.安裝notpad++,或者一個好用的文本編輯器,最好不要用記事本,很不方便!
#
**HelloWorld**
環境安裝好了,測試代碼一定要寫HelloWorld!代表你向這個世界的吶喊,儀式感很重要,就像你生活 ?中和家人,朋友,妻子在節日中或者紀念日一定要做一些事情,這就是儀式感,所以各位來跟著我寫 ????哈!
1.我們先隨便建立一個文件夾,放我們的代碼
2.新建文件 Hello.java
3.編寫我們的HelloWorld程序!
```
public class Hello{
public static void main(String[] args){
System.out.println("Hello,World!");
}
}
```
4.保存文件,打開命令行,利用javac編譯!
1javac Hello.java
2# 如果沒有報錯,查看文件夾下是否有新的一個文件
3# Hello.class
4# 如果沒有出現,恭喜!說明你遇到了你在學Java當中的第一個Bug
5.java執行!
1java Hello
2# 成功輸出Hello,World!

1. ?如果出現錯誤,檢查字母大小寫是否有錯誤,或者是否標點符號錯誤,文件名錯誤等等,一定要確保成功輸出,我們之后再來研究,它是怎么輸出的!
### **編寫** **Java** **程序時,應注意以下幾點:**
**大小寫敏感**:Java 是大小寫敏感的,這就意味著標識符 Hello 與 hello 是不同的。
**類名**:對于所有的類來說,類名的首字母應該大寫。如果類名由若干單詞組成,那么每個單詞的首 ?字母應該大寫,例如 **MyFirstJavaClass**。
**方法名**:所有的方法名都應該以小寫字母開頭。如果方法名含有若干單詞,則后面的每個單詞首字 ?母大寫。
**源文件名**:源文件名必須和類名相同。當保存文件的時候,你應該使用類名作為文件名保存(切記Java 是大小寫敏感的),文件名的后綴為.java。(如果文件名和類名不相同則會導致編譯錯誤)。
**主方法入口**:所有的 Java 程序由 **public static void main(String \[\]args)** 方法開始執行。
# **JAVA程序運行機制**
計算機的高級編程語言類型: 編譯型 ,解釋型. Java 語言是兩種類型的結合;
【科普:編譯型 ,解釋型】
1//從字面上看,“編譯”和“解釋”的確都有“翻譯”的意思,它們的區別則在于翻譯的時機安排不大一樣。
2//我們先看看編譯型:有一個負責翻譯的程序來對我們的源代碼進行轉換,生成相對應的可執行代碼。這 個過程說得專業一點,就稱為編譯(Compile),而負責編譯的程序自然就稱為編譯器(Compiler)。 就類似于把一本中文書直接翻譯成英文版進行出售。
3//現在再看看解釋型:打個比方:假如你打算閱讀一本外文書,而你不知道這門外語,那么你可以找一 名翻譯,給他足夠的時間讓他從頭到尾把整本書翻譯好,然后把書的母語版交給你閱讀(編譯型);或 者,你也立刻讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,如果你想往回看某個章節,他也得重新給 你翻譯。(解釋型)
4//編譯型與解釋型,兩者各有利弊。前者由于程序執行速度快,同等條件下對系統要求較低,因此像開 發操作系統、大型應用程序、數據庫系統等時都采用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可視為編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣 的對速度要求不高、對不同系統平臺間的兼容性有一定要求的程序則通常使用解釋性語言,如Java、 JavaScript、VBScript、Perl、Python等等。
5//Java語言雖然比較接近解釋型語言的特征,但在執行之前已經預先進行一次預編譯,生成的代碼是介 于機器碼和Java源代碼之間的中介代碼,運行的時候則由JVM(Java的虛擬機平臺,可視為解釋器)解 釋執行。它既保留了源代碼的高抽象、可移植的特點,又已經完成了對源代碼的大部分預編譯工作,所以 執行起來比“純解釋型”程序要快許多。
6//總之,隨著設計技術與硬件的不斷發展,編譯型與解釋型兩種方式的界限正在不斷變得模糊。
**第一步:編譯**
利用編譯器(javac)將源程序編譯成字節碼à 字節碼文件名:源文件名.class
### **第二部:運行**
利用虛擬機(解釋器,java)解釋執行class字節碼文件。

# **總結**
我們了解了計算機的發展史
看到了Java帝國的誕生
了解了Java這門語言的特性
跟著歷史看懂了Java的三大版本
安裝了Java的開發環境
寫了自己的第一個程序HelloWorld!
知道了編譯型和解釋型語言的區別
當然,我認為這些都不是最重要的,關鍵是,今天我們踏出了第一步,我看過這樣一個故事:
一個原始人抬頭仰望星空,宇宙發出了警告!人類問為什么,宇宙使者說:從他抬頭仰望星空開始,整 ?個人類的發展就不過是為了實現他的愿望而已!
所以,只要確定了方向,只要不停下腳步,我們終會抵達終點,實現自己的夢!
# **安裝IDEA**
每次都要利用記事本去編寫代碼的話,那將是十分麻煩的,工程量大,不易于調試,所以我們迫切需要 ?一款智能的開發工具,于是Eclipse,myEclipse,netbeans,IntellijIDEA等智能的IDE誕生了。早時候學習都是利用的Eclipse,不過現在我們學習和工作大部分都利用IDEA了。這也是互聯網的殘酷性,每個 ?時代都有自己的寵兒。所以我們無論什么時候都需要有危機感,不能忘記學習!
我們來看看IDEA,它是 ?JetBrains公司下的Java集成開發環境,在業界被公認為是最好的Java開發工具之一;JetBrains是捷克的一家軟件公司,該公司總部位于捷克共和國的首都布拉格,開發人員以嚴謹著 ?稱的東歐程序員為主,旗下開發了多款軟件開發工具;
官方網站:[https://www.jetbrains.com/](https://www.jetbrains.com/)
###
**演示:瀏覽并介紹****jetbrains****的官網**

目前IntelliJ IDEA有免費的社區版(功能相對較少),和收費的旗艦版(功能比較全面); 我們看自己需要和能力下載,有條件的話,用人家的東西還是可以用正版的。
IDEA破解版下載地址:
1鏈接:https://pan.baidu.com/s/1_9CDV4jL3BTzi6omT79ulQ2提取碼:xmxq
官方下載地址:[http://www.jetbrains.com/idea/download/#section=windows](http://www.jetbrains.com/idea/download/#section%3Dwindows)
### **安裝步驟**:
1.直接安裝完成
2.下載破解補丁:[http://idea.lanyus.com/](http://idea.lanyus.com/)
3.得到 JetbrainsCrack-2.6.10-release-enc.jar我們重命名去掉 \-release-enc然后放在idea安裝目錄的bin文件夾下
4.在IDEA安裝目錄bin目錄里找到 idea.exe.vmoptions和 idea64.exe.vmoptions兩個文件打開,在最后一行添加 \-javaagent:D:IDEAIntelliJIDEA2017.2.5binJetbrainsCrack-2.6.10.jar
5.打開IDEA激活碼填寫
```
ThisCrackLicenseId-{"licenseId":"ThisCrackLicenseId","licenseeName":"idea","assigneeName":"kuangshen","assigneeEmail":"24736743@qq.com","licenseRestriction":"For This Crack, Only Test! Please support genuine!!!","checkConcurrentUse":false,"products":[{"code":"II","paidUpTo":"2099-12-31"},{"code":"DM","paidUpTo":"2099-12-31"},{"code":"AC","paidUpTo":"2099-12-31"},{"code":"RS0","paidUpTo":"2099-12-31"},{"code":"WS","paidUpTo":"2099-12-31"},{"code":"DPN","paidUpTo":"2099-12-31"},{"code":"RC","paidUpTo":"2099-12-31"},{"code":"PS","paidUpTo":"2099-12-31"},{"code":"DC","paidUpTo":"2099-12-31"},{"code":"RM","paidUpTo":"2099-12-31"},{"code":"CL","paidUpTo":"2099-12-31"},{"code":"PC","paidUpTo":"2099-12-31"}],"hash":"2911276/0","gracePeriodDays":7,"autoProlongated":false}
```
1.復制漢化文件到lib: (漢化有BUG,不建議大家漢化,順便也能提高英語水平!)
2.IDEA優化配置參考 :[https://jingyan.baidu.com/article/dca1fa6f6af95af1a540527d.html](https://jingyan.baidu.com/article/dca1fa6f6af95af1a540527d.html)
1.調節字體
2.鼠標滾動大小
3.注釋顏色
4.字符編碼設置
5.常用快捷鍵
6.項目屬性瀏覽
3.利用IDEA編寫HelloWorld!查看控制臺輸出結果!
- Java基礎企業實踐篇
- 一、Java開發環境搭建
- 1.Java的前世今生
- 2.JVM、JRE和JDK的概念及關系
- 3.Java的跨平臺特性
- 4.Java運行機制
- 5.環境搭建
- 二、程序設計基礎
- 1.掌握代碼基本結構
- 2.熟練寫注釋
- 3.掌握標識符的使用
- 4.掌握關鍵字的使用
- 5.掌握常量的使用
- 6.認識變量
- 7.掌握數據類型的使用
- 8.掌握類型轉換
- 9.掌握作用域
- 10.掌握運算符的使用
- 11.掌握順序結構的使用
- 13.掌握循環結構的使用
- 14.掌握方法的使用
- 15.掌握數組的使用
- 16.掌握修飾符的使用
- 三、面向對象語言基礎
- 1.對象的概念
- 2.類的概念
- 3.類和對象的關系
- 4.面向過程和面向對象的區別
- 5.實訓項目:五子棋游戲設計與實現
- 6.案例練習
- 案例一:地址類
- 案例二:員工類
- 案例三:動物狗類
- 案例四:銀行賬戶類
- 案例五:圖書類
- 四、面向對象概念的理解,類和對象
- 1.類的構成
- 2.屬性
- 3.方法和構造方法
- 4.重載和重寫
- 5.變量的作用域
- 6.成員變量和局部變量
- 7.靜態塊的作用和加載機制
- 8.類生成對象的過程
- 9.對象參數傳遞過程
- 五、封裝,繼承,多態
- 1.理解封裝、繼承、多態的概念和目的
- 2.理解封裝、繼承、多態的實現方法和步驟
- 3.掌握Java訪問修飾符
- 4.理解什么是內部類
- 5.理解this、static、final關鍵字
- 6.實訓項目:租車系統設計與實現
- 六、抽象類和接口
- 1.理解抽象類的概念,為什么要有抽象類
- 2.掌握抽象類的聲明格式
- 3.理解什么是接口,為什么要有接口
- 4.掌握接口的定義與實現
- 5.理解接口和抽象類的區別
- 6.實訓案例
- 案例一:電腦模型(OO實現)
- 案例二:銀行轉賬(OO實現)
- 七、Object類和常用API
- 1.理解什么是API
- 2.掌握Java?API文檔的使用
- 3.理解Java類庫的概念
- 4.掌握Object類并掌握該類中的方法
- 5.掌握String類的應用
- 6.掌握StringBuffer、StringBuilder類的應用
- 7.掌握基本數據類型及其包裝類
- 8.掌握Java日期類
- 八、泛型、集合
- 1.理解泛型的概念和實現語法
- 2.理解Java集合框架三大接口:List、Set、Map
- 3.掌握List接口的實現類ArrayList、LinkedList的使用
- 4.掌握HashSet的使用
- 5.掌握HashMap的使用
- 6.掌握Collections類中提供的靜態方法
- 九、異常和IO技術
- 1.理解異常的概念
- 2.掌握異常的分類和Java常見的異常
- 3.理解掌握Java的異常處理機制
- 4.掌握自定義異常
- 5.理解文件系統和File類
- 6.理解I/O概念和分類
- 7.掌握常見的I/O流對象
- 8.掌握文件流與緩沖流
- 十、泛型的延伸
- 1.理解并掌握泛型的基本原理與具體運作過程
- 2.掌握泛型類的定義
- 3.掌握泛型方法的定義
- 十一、流的延伸
- 1.理解數據流的作用
- 2.掌握對象流的作用
- 3.理解對象序列化的概念
- 5.理解線程死鎖
- 4.理解對象反序列化的概念
- 十二、反射技術
- 1.理解反射的概念
- 2.理解反射的工作原理
- 3.理解Reflection API中相關類的作用
- 十三、多線程技術
- 1.理解多線程的概念
- 2.理解線程的狀態與生命周期
- 3.理解多線程通信
- 4.理解線程同步
- 十四、網絡編程技術
- 1.理解網絡編程常用協議TCP/UDP/HTTP/FTP等基礎知識
- 2.掌握TCP網絡編程連接建立的3次握手和4次揮手的具體過程
- 3.掌握UDP網絡通信工作原理
- 4.掌握Socket通信模型的工作原理
- 十五、圖形化界面
- 5.理解線程死鎖
- 十六、JDBC技術
- 1.熟練掌握JDBCAPI中常用接口的基本概念
- 2.理解JDBC連接數據庫的思路和實現方法
- 3.熟練掌握JDBC連接數據庫的基本步驟
- 4.理解并掌握數據庫連接公共類的設計思路和方法
- 5.熟練掌握JDBC使用公共類連接數據庫的基本步驟
- 6.熟練掌握JDBC操作數據庫的基本步驟
- 7.熟練掌握JDBC操作數據庫的SQL語句
- 8.熟練掌握JDBC操作單表的方法及SQL語句
- 9.熟練掌握JDBC操作多表的方法及SQL語句
- 10.理解事務的基本概念
- 11.熟練掌握JDBC在綜合項目的使用方法(包含:基本數據、業務處理等)
- 十七、課外補充
- 附錄1.各種字符集和編碼詳解
- 項目實訓
- 項目2:汽車銷售系統