1、基礎
面向對象
面向對象概念
面向對象(Object Oriented,OO)是軟件開發方法java
- 對象:萬物皆對象,對象能夠是具體的事物,也能夠是抽象的規則、計劃或事件。
- 對象的狀態和行爲:狀態表明數據,行爲表明方法。
- 類(數據類型):具備相同特性(數據元素)和行爲(功能)的對象的抽象就是類。類的具體化就是對象,對象是類的實例。類具備屬性(對象狀態的抽象)和操做(對象行爲的抽象)
- 類的結構:世界上存在若干類,這些類之間存在關係,一般存在兩種主要的結構關係。⒈通常-具體結構(分類結構,"is a"關係)⒉總體-部分結構(組織結構,"has a"關係)
- 消息和方法:對象之間進行通訊的結構叫作消息。對象接收到消息,根據消息說明去調用方法(消息應說明執行對象、方法、參數)。方法有方法名、返回值、參數、方法體。
面向對象特徵
- 封裝:封裝對象的屬性和行爲,並設置訪問權限(支持方法重載)
- 繼承:繼承父類的屬性和行爲,提供複用性。(單繼承,接口多繼承;支持方法重寫)
- 多態:基於封裝、繼承(重寫)、父引用指向子對象;容許不一樣的對象對同一消息作出不一樣反應;編譯期綁定(成員變量、靜態變量、靜態方法)、運行期綁定(成員方法);方法多態(重寫,重載)、引用多態(向上造型);
- 抽象:表示對問題領域進行分析、設計中得出的抽象的概念,基於abstract關鍵字,必須被子類繼承重寫,沒法私有化(private)、靜態化(static)、最終化(final)。
JAVA
JAVA體系
- JAVASE(桌面程序)
- JAVAEE(網站服務)
- JAVAME(手機嵌入式)
- JAVACard(Java小程序Applets)
JAVA特色
- 簡單性:單繼承、自動拆裝箱、簡化內存管理(引用替代指針,提供自動GC垃圾回收器)...
- 移植性:Java先編譯成字節碼(中間碼),由JVM來進行解釋(二進制碼)運行。
- 健壯性:強類型機制、異常處理、垃圾的自動收集等機制。
- 多線程:支持多線程
JAVA發展史
- 1991年4月:James Gosling博士領導Gree Project,推出JAVA前身(Oak橡樹)
- 1995年5月23日:Oak語言更名爲JAVA,並在SunWorld大會上正式發佈JAVA 1.0版本,並提出"Write Once, Run AnyWhere"口號。
- 1996年1月23日:JDK 1.0發佈,提供純解釋執行的Java虛擬機實現(Sun Classic VM)。表明技術:Java虛擬機、Applet、AWT等...
- 1996年4月:10個最主要的操做系統供應商申明將在其產品中嵌入Java技術。
- 1996年5月底:Sun公司於美國舊金山舉行首屆JavaOne大會。
- 1996年9月:已有大約8.3萬個網頁應用了Java技術來製做。
- 1997年2月19日:JDK 1.1發佈。表明技術:JAR文件格式、JDBC、JavaBeans、RMI。Java語法:內部類(Inner Class)和反射(Reflection)
- 1998年12月4日:JDK 1.2-Playground(競技場)發佈。Sun在這個版本中將Java體系拆分爲3個方向:J2SE(面向桌面開發)、J2EE(面向企業級開發)、J2ME(面向手機移動終端開發);表明技術:EJB、Java Plug-in、Java IDL、Swing等;Java虛擬機:第一次內置JIT(Just In Time)編譯器(JDK1.2曾並存Classic VM、HoSpot VM、Exact VM,Exact VM只在Solaris平臺出現過;後二者是內置JIT編譯器;以前版本Classic VM只能之外掛形式使用JIT編譯器);Java語法:添加strictfp關鍵字;Java API:Collections集合類。
- 1999年3月:JDK 1.2.1發佈。
- 1999年4月8日:JDK 1.1 共發佈 1.1.0 ~ 1.1.8 九個版本。從1.1.4以後,每一個版本都有工程代號:Sparkler、Pumpkin、Abigail、Brutus、Chelsea
- 1999年4月27日:HotSpot虛擬機發布。最初由"Longview Technologies"小公司發佈。1997年被Sun公司收購。HotSpot虛擬機發布時是做爲JDK1.2的附加程序提供。後來成爲JDK 1.3及以後全部版本的Sun JDK的默認虛擬機。
- 1999年7月:JDK 1.2.2發佈。
- 2000年5月8日:JDK 1.3-Kestrel(美洲紅隼)發佈。Java API:數學運算、新的Timer API等;JNDI做爲一項平臺級服務提供(之前僅是一項擴展);使用CORBA IIOP實現RMI的通訊協議;改進JAVA 2D(提供大量新的Java 2D Api,新增JavaSound類庫)。
- 2001你那5月17日:JDK 1.3.1-Ladybrid(瓢蟲)修正版本發佈。自JDK 1.3開始,Sun維持一個習慣:每隔兩年發佈一個JDK主版本,以動物命名,期間的各個修正版本則以昆蟲做爲工程名稱。
- 2002年2月13日:JDK 1.4-Merlin(灰背隼)發佈。技術特性:正則表達式、異常鏈、NIO、日誌類、XML解析器和XSTL轉換器等。
- 2002年9月16日:JDk 1.4.1-Grasshopper(蚱蜢)修正版本發佈。
- 2002年期間:微軟公司發佈.NET Framework,不管是技術實現上仍是目標用戶都與Java有不少相近之處,給Java帶來了不少討論、比較和競爭對Java的發展進程影響很大。
- 2003年6月26日:JDK 1.4.2-Mantis(螳螂)修正版本發佈。
- 2004年9月30日:JDK 1.5-Tiger(老虎)發佈。語法特性:自動裝箱、泛型、動態註解、枚舉、可變長參數、遍歷循環(foreach)等;Java 虛擬機:改進Java的內存模型(Java Memory Model,JMM);Java API:提供java.util.concurrent併發包等。
- 2006年11月13日:JavaOne大會上,Sun公司宣佈最終會將Java開源。
- 2006年12月11日:JDK 1.6-Mustang(野馬)發佈。命名方式:終結J2EE、J2SE、J2ME命名方式,啓用Java SE六、Java EE六、Java ME6命名方式;Java API:提供動態語言支持(經過內置Mozilla JavaScript Rhino引擎實現)、提供編譯API、微型HTTP服務器API等;Java虛擬機:作了大量改進,包括鎖與同步、垃圾收集、類加載等方面的算法。
- 2009年2月19日:JDK 1.7-Dolphin(海豚)發佈。主要改進:新的G1收集器(2012年4月的Update4中才正式"轉正")、增強非Java語言的調用支持(JSR-292,未徹底實現定型)、升級類加載架構等。推遲計劃:lambda項目(Lambda表達式、函數式編程)、Jigsaw項目(虛擬機模塊化支持)、Coin項目(語言細節進化)。
- 2014年3月18日:JDK 1.8-Spider(蜘蛛)發佈。語言特性:Lambda表達式、方法引用、引入defalut關鍵字、重複註解、擴展註解的支持、Optional、Stream、Date/Time API、JavaScript引擎Nashorn、Base64。
JVM
JVM發展史
- Sun Classic/Exact VM: Classic VM:(第一款商用Java虛擬機;純解釋器,外掛編譯器(外掛後解析器便再也不工做)),Exact VM(兩級即時編譯器;編譯器與解析器混合工做模式;使用準確式內存管理,可判斷內存數據的類型)
- Sun HotSpot VM:由"Longview Technologies"小公司設計,最後被Sun公司收購,具有Exact VM的優勢,及熱點代碼探測技術(經過執行計數器找出最具備編譯價值代碼,通知JIT編譯器以方法爲單位進行編譯。取代了Exact VM)
- Sun Mobile-Embedded VM/Meta-Circular VM:面向移動和嵌入式市場。KVM(簡單、輕量、高度可移植,運行速度較慢,曾普遍應用非智能手機上);CDC/CLDC HotSpot Implementation(Java ME的重要支柱);Squawk VM(Java代碼比重很高);JavaInJava(Sun 公司實驗室性質虛擬機,試圖實現"元循環",內部沒有JIT編譯器,只以解釋模式執行);Maxine VM(與JavaInJava類似,有先進的JIT編譯器和垃圾收集器(但沒有解釋器),執行效率略高)。
- BEA JRockit/IBM J9 VM:除Sun公司之外,其餘研發虛擬機的公司中,規模最大、最著名的就是BEA和IBM公司。
- Azul VM/BEA Liquid VM:高性能Java虛擬機
- Apache harmony/Google Android Dalvik VM:"虛擬機",而非"Java 虛擬機"。
- Microsoft JVM及其餘:與Sun公司爭奪Java的控制權,令Java從跨平臺技術變爲綁定在Windows上的技術是微軟公司的主要目的。