Java基礎教程:面向對象編程
內容大綱

Java語言概述
Java語言特點
1.Java為純面向對象的語言,它能夠直接反映現實生活中的對象。總之,Everything is object!
2.平台無關性。Java為解釋型語言,編譯器會把Java代碼變成“”“中間代碼”,然后在JVM上解釋執行。
3.Java提供了很多內置的類庫,這些類庫簡化了開發人員的程序設計工作,同時縮短了項目開發時間。
4.Java語言提供了對Web應用的支持。
5.Java語言提供了較好的安全性和健壯性。
為了增強程序的安全性,Java語言提供了一個防止惡意代碼攻擊的安全機制(數組邊界檢測和byte code校驗等)
Java的強類型機制、垃圾回收機制、異常處理和安全檢測機制使Java語言編寫的程序具有健壯性。
Java Development Kit
JDK究竟是何方神聖?

類加載器
Java類加載器(英語:Java Classloader)是Java運行時環境(Java Runtime Environment)的一部分,負責動態加載Java類到Java虛擬機的內存空間中。類通常是按需加載,即第一次使用該類時才加載。由於有了類加載器,Java運行時系統不需要知道文件與文件系統。學習類加載器時,掌握Java的委派概念很重要。
每個Java類必須由某個類加載器裝入到內存。Java程序可以利用外部庫(即由其他作者編寫的軟件庫)。
-
- 引導(Bootstrap)類加載器。由原生代碼(如C語言)編寫,不繼承自
java.lang.ClassLoader。負責加載核心Java庫,存儲在<JAVA_HOME>/jre/lib目錄中。 - 擴展(Extensions)類加載器。用來在
<JAVA_HOME>/jre/lib/ext,或java.ext.dirs中指明的目錄中加載 Java的擴展庫。Java 虛擬機的實現會提供一個擴展庫目錄。該類加載器在此目錄里面查找並加載 Java 類。該類由sun.misc.Launcher$ExtClassLoader實現。 - Apps類加載器(也稱系統類加載器)。根據 Java應用程序的類路徑(
java.class.path或CLASSPATH環境變量)來加載 Java 類。一般來說,Java 應用的類都是由它來完成加載的。可以通過 ClassLoader.getSystemClassLoader()來獲取它。該類由sun.misc.Launcher$AppClassLoader實現。
- 引導(Bootstrap)類加載器。由原生代碼(如C語言)編寫,不繼承自
每個類裝載器有一個父裝載器(parent class loader)。
垃圾回收機制
Java語言提供了垃圾回收器來自動檢測對象的作用域、實現自動地、把不再被使用的存儲空間釋放掉。
垃圾回收器主要完成三部分任務:分配內存、確保被引用對象的內存不被錯誤地回收以及回收不再被引用的對象的內存空間。
給對象引用賦值為null,並且該對象無引用時,GC會標記該對象為垃圾,並在后面一個不確定的時間內回收垃圾。所謂不確定是指什么時間回收,程序員無法控制。
Java開發環境配置
基本數據類型及其包裝類
Java不僅支持下述8種基本數據類型,還為這8種基本數據類型提供了對應的包裝類,通過這些包裝類,我們就可以將上述基本數據類型當做Java中的類對象來處理了。值得說明的是,Java程序中可以直接操作基本數據類型,但是某些情況下需要將它們看成對象來處理,這些情況下就需要借助於Java API中基本數據類型對應的包裝類來處理了。

舉例布爾包裝類提供的方法摘要:
自動轉換機與強制轉換
數據類型的轉換,分為自動轉換和強制轉換。自動轉換是程序在執行過程中 “ 悄然 ” 進行的轉換,不需要用戶提前聲明,一般是從位數低的類型向位數高的類型轉換;強制類型轉換則必須在代碼中聲明,轉換順序不受限制。
自動數據類型轉換
強制數據類型轉換
強制轉換的格式是在需要轉型的數據前加上 “( )” ,然后在括號內加入需要轉化的數據類型。有的數據經過轉型運算后,精度會丟失,而有的會更加精確。
基礎語法
While循環

Do...While循環

For 循環

For...Each循環

If語句

Switch語句

核心類庫


面向對象程序設計(OOP)
類與對象
其中類別(Class)定義了一件事物的抽象特點。類的定義包含了數據的形式以及對數據的操作。舉例來說,“狗”這個類會包含狗的一切基礎特征,即所有“狗”都共有的特征或行為,例如它的孕育、毛皮顏色和吠叫的能力。類可以為程序提供模版和結構。一個類的方法和屬性被稱為“成員”。 我們來看一段偽代碼:

對象(Object)是類的實例。對象有時會對應到現實世界中的事物,舉例來說,一個圖形程序可能有圓形、矩形與畫面等對象,一個在線購物系統可能有購物車、顧客與產品等類。[7]。有時對象會表示更抽象的實體,比如一個被打開的文件或是一個提供美國慣用量測轉換的服務。每個對象就是一個特定類的實例(例如,名稱是“瑪麗”的對象可能是類雇員的一個實例)。程序在面向對象編程當中被視為方法,變量被視為成員或屬性。例如,“狗”這個類列舉狗的特點,從而使這個類定義了世界上所有的狗。而萊絲這個對象則是一條具體的狗,它的屬性也是具體的。狗有皮毛顏色,而萊絲的皮毛顏色是棕白色的。因此,萊絲就是狗這個類的一個實例。一個具體對象屬性的值被稱作它的“狀態”。(系統給對象分配內存空間,而不會給類分配內存空間。這很好理解,類是抽象的系統不可能給抽象的東西分配空間,而對象則是具體的。)
假設我們已經在上面定義了狗這個類,我們就可以用這個類來定義對象:

我們無法讓狗這個類去吠叫,但是我們可以讓對象“萊絲”去吠叫,正如狗可以吠叫,但沒有具體的狗就無法吠叫。
類和對象就好比是“實型”和“1.23”,“實型”是一種數據的類型,而“1.23”是一個真正的“實數”(即對象)。所有的“實數”都具有“實型”所描訴的特征,如“實數的大小”,系統則分配內存給“實數”存儲具體的數值。
面向對象程序設計
面向對象程序設計(英語:Object-oriented programming,縮寫:OOP)是種具有對象概念的程序編程典范,同時也是一種程序開發的抽象方針。它可能包含數據、屬性、代碼與方法。對象則指的是類的實例。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性,對象里的程序可以訪問及經常修改對象相關連的數據。在面向對象程序編程里,計算機程序會被設計成彼此相關的對象[1][2]。
面向對象程序設計可以看作一種在程序中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據並將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。目前已經被證實的是,面向對象程序設計推廣了程序的靈活性和可維護性,並且在大型項目設計中廣為應用。此外,支持者聲稱面向對象程序設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程序,使得程序更加便於分析、設計、理解。反對者在某些領域對此予以否認。
構造方法

構造方法的作用:(1).構造出來一個類的實例 (2).對構造出來個一個類的實例(對象)初始化。
創建對象
對象是根據類創建的。在Java中,使用關鍵字new來創建一個新的對象。創建對象需要以下三步:
- 聲明:聲明一個對象,包括對象名稱和對象類型。
- 實例化:使用關鍵字new來創建一個對象。
- 初始化:使用new創建對象時,會調用構造方法初始化對象。

訪問實例變量和方法


