Java面向對象知識總結


概述

Java是一門面向對象的語言。對象是Java程序中的基本實體。除了對象之外Java程序同樣處理基本數據。
對象是由類定義的,類可以被認為是該對象的數據類型。
類、對象、封裝以及繼承是面向對象軟件世界的主要概念。

使用對象

抽象

一個對象就是一個抽象,這意味着從該對象的使用者的角度而言,它具體的工作細節是無關緊要的。抽象隱藏細節,一個好的抽象會在恰當的時間隱藏恰當的細節,因此我們能夠處理復雜的事物。

創建對象

一個Java變量既可以保存一個基本值,又可以保存一個對象引用。與用來保存基本類型的變量一樣,用作對象引用的變量必須得到聲明。
new 操作符返回一個指向新創建的對象的引用。
在對象實例化之后可以使用點(.) 操作符直接附加在該對象的引用之后,后面跟着所調用的方法。

類庫與包

類庫是一套用於支持程序開發的類。一個類庫同城與某一編譯器一同被提供。但是類庫同樣可以從第三方的廠商單獨獲得。類庫中包含着方法,這些方法因其提供了某一特殊功能而通常對程序員頗具價值。實際上,程序員通常會依賴於某一類中的某一方法並且將其當作語言的一部分使用。但是從技術上而言,它們並不存在於該語言的定義中。例如String並不是Java語言標准類庫的一部分,組成庫的類是由SunMic公司的職員創建的。
類庫是由若干類的簇群組成,有時稱它們為JavaAPI。API表示應用程序員接口。與API名字相比,包組織更為根本,語言基礎性更強。雖然包和API名字之間有一種一般的對應關系,但是組成某個特定API的一組類可能橫跨若干包。

import聲明

java.lang包中的類在編寫程序時是自動調用的。但是如果引用其他包中的類,我們要么完整說明該引用,要么使用import(導入)聲明。

狀態和行為

所有對象都具有一個狀態和一套行為。對象的變量值定義了其狀態,對象所響應的方法定義了其行為。每一個對象都具有其自身所特有的狀態。一個對象的狀態及該對象的行為共同起着作用。任何對象都可以用其狀態和行為對其進行描述。

對象是由類定義的。類是創建對象所依據的模型、模式或者藍圖。類就是對象的藍圖,但是類不是對象。變量的作用域決定了變量在那些地方可以得到引用,它取決於變量是在何處得到聲明的。
在類級聲明的屬性同樣稱為實例數據,因為該數據的存儲空間為所建類的每一個實例保留着。對於任何在類一級聲明的變量,Java都會自動將其初始化。例如所有數值類型的int和double都初始化為0.但是為了程序的穩定性,較好的做法是對變量進行明確的初始化。

封裝

對象應該封裝起來,程序的其余部分應該僅僅通過一個良好定義的接口與對象相互作用。
【成語變量和局部變量是有區別】
屬性和方法的可見性修飾符。
局部數據:一個變量或者常量的作用域是能夠對該變量做出有效引用的程序部分。一個變量可以在某個方法的內部被聲明,這使得其成為與實例數據相反的局部數據。

構造函數

構造函數不能有任何返回類型,void也是不可以的。構造函數類似於對象初始化時調用的方法。
構造函數與常規函數有兩個地方不同:
【1】構造函數與類有相同的名字
【2】構造函數不能返回一個值,且不具有在方法頭中指定的返回類型。

方法重載

Java和其他的面向對象的語言一樣,具有不同參數列表的多個方法是可以使用相同的名字,這種技術叫做方法重載。重載方法的版本通過簽名加以區分。參數的類型、數量或者順序必須不同。
重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標准。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。

重載的規則:

1、必須具有不同的參數列表;
2、可以有不同的返回類型,只要參數列表不同就可以了;
3、可以有不同的訪問修飾符;
4、可以拋出不同的異常;

方法重寫

  1. 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。
  2. 若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。 如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
  3. 子類函數的訪問修飾權限不能少於父類的;

重寫的規則

1、參數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載。
2、返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載。
3、訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
4、重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。

方法重載和方法重寫的比較總結

  • 多態性是面向對象編程的一種特性,和方法無關,簡單說,就是同樣的一個方法能夠根據輸入數據的不同,做出不同的處理,即方法的重載——有不同的參數列表(靜態多態性)。
  • 當子類繼承自父類的相同方法,輸入數據一樣,但要做出有別於父類的響應時,你就要覆蓋父類方法,即在子類中重寫該方法——相同參數,不同實現(動態多態性)。
  • 重寫多態性起作用,對調用被重載過的方法可以大大減少代碼的輸入量,同一個方法名只要往里面傳遞不同的參數就可以擁有不同的功能或返回值。用好重寫和重載可以設計一個結構清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般.

引用

對象應用變量和對象是兩個不同的東西。引用變量的聲明和創建它所引用的對象,其步驟是不同的。一個對象引用變量存儲的是某一對象的地址。

空引用

保留字null表示引用沒有指向一個有效的對象。

this引用

Java的另一個特殊引用稱為this引用。this 是Java 的保留字。它允許某一對象指向其自身。在類的內部this引用可以用來指向當前正在運行的對象。this引用總是指向擋牆正在運行的對象。

別名

應為對象的引用變量存儲的是一個地址,所以程序員在管理對象的時候必須特別小心。
基本類型的賦值:在基本類型的賦值中(num2=num1)num2中存儲的是num1存儲值的一個備份。
對象類型的賦值:兩個對象類型引用的賦值動作之后是將O1的地址復制到O2中,最初兩者可能指向不同的對象,賦值之后兩者包含都是同樣的地址,因此指向的是相同的對象。

多個引用可以指向相同的對象,這些應用都是彼此的別名。
“==”操作符比較的是對象引用的等同性,如果相互為別名那么返回true。

垃圾回收

當某個對象的所有引用都丟失了(可能是因為重新賦值),則該對象就不能在參與到該程序中來了。該程序不能夠調用其方法或者使用其變量,此時該對象為垃圾
Java會進行垃圾自動回收,程序員不需要考慮成為垃圾的存儲空間具體如何回收的問題。
如果程序員想在某一活動完成的同時銷毀該對象,則此程序員可以在該對象的類中定義一個稱為finalize的方法。Java在該對象標記為垃圾回收之后且在他實際銷毀之前運行它。finalize可以用來處理Java回收期不會處理的活動比如關閉文件。

對象作為參數傳遞

在將一個對象傳遞給一個方法之后,實參和形參就成為了彼此的別名。Java通過值傳遞的方式將所有參數傳遞給某一方法。本質上講,參數傳遞就像是一個賦值語句,即將在存儲在實參中共的值的一個備份賦值給形參。
當對某一方法內部的一個形參進行更改時,我們必須考慮這一問題。因為形參是傳遞進來的值的一個單獨備份,因此對其做出的任何更改將不會對實參產生印象。在控制權返回至調用方法之后,實參的值和方法被調用之前一樣。

static修飾符

static修飾符是能夠將一變量和方法與其類而不是該類的對象關聯起來。

靜態變量

靜態變量也稱為類變量,每一個對象存在一個靜態變量的副本。靜態變量由類的所有實例共享。

靜態方法

靜態方法也成為類方法,可以通過其類名來調用。調用靜態方法的時候不需要對該類的某一對象進行實例化。因為靜態方法不能夠在某個對象的上下文中進行操作,所以它不能引用僅存在與某個類的某個實例的實例變量。如果某個靜態方法企圖好似還用某個非靜態變量,則編譯器會報錯、

包裝類

一個包裝類就是代表一個特定的基本類型,這樣就可以當作對象來處理基本類型。

基本數據類型 包裝類
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double

接口

一個幾口就是一個包含常量和抽象方法的集合,它不能被實例化。

Comparable接口

Java標准類庫既包含接口也包含類。Comparable接口就是定義在java.lang中的,它僅僅包含一個方法,也就是compareTo方法,

Ob1.compareTo(Ob2);

如果Ob1小於Ob2返回負;
如果Ob1等於Ob2返回0;
如果Ob1大於Ob2返回正;

Iterator接口

Iterator接口是作為Java標准類庫的一部分而定義的另一接口。它由表示某個對象集合的類使用。

Iterator接口中的兩個主要方法是hasNext(返回一個布爾結果)和next(返回一個對象)。

繼承

類確立了對象的特征和行為,但是並不為變量保留內存空間(除非這些變量被聲明為static)。類是計划,對象就是該計划的具體化。

派生類

繼承就是通過某個現有類派生出一個新類的過程。用來派生新類的初始類稱為父類、超類或者基類;派生類則被稱為子類或者次類。extends表示新類從某個現有類中派生而來。
繼承在所有的父類和子類之間創建了一種is-a關系。

protected修飾符

protected提供了允許繼承的最佳可能封裝。

super引用

super調用父類構造方法。super應用同樣可以用來引用父類的成員變量和方法。

重寫方法

使用final修飾符定義的方法,子類是不能重載的。

類的層次結構

相同父類的兩個子類稱為兄弟類。

Object類

在Java語言中所有的類都是直接或者間接的由Object類派生來的。

抽象類

抽象類不能被實例化。它表示的是一個概念,其他類可以在這個概念之上創建自己的定義。它通常還有一個或者多個沒有定義的抽象方法。
一個抽象類派生出的某個類必須重載其父類的所有抽象方法,否則該派生類也將被視為抽象類。
將某個抽象方法修飾為final和static將會出現矛盾。因此不要出現這方面的錯誤。

接口的層次結構

接口之間的繼承和類之間的繼承是一樣的。不過接口的所有成員都是public的。
接口繼承,子接口可以繼承父接口的所有抽象方法和常量。

多態性

多態性是指具有許多形態。多態引用就是在不同時間點,可以指向不同對象類型的應用變量。動態綁定的實現就是多態引用在某個時刻引用變量所引用的對象來決定。

  • 類層次結構的多態引用
  • 方法繼承的多態引用
  • 基於接口的多態引用

異常

異常是定義了某個非正常或者錯誤情形的對象。異常由程序或者運行時環境拋出,如果需要的話我們可以將其捕獲並對其進行恰當的處理。
錯誤與異常類似,不過錯誤通常表示的是某種不可恢復的情形,且不必去捕獲它。

異常指不期而至的各種狀況,如:文件找不到、網絡連接失敗、非法參數等。異常是一個事件,它發生在程序運行期間,干擾了正常的指令流程。Java通 過API中Throwable類的眾多子類描述各種不同的異常。因而,Java異常都是對象,是Throwable子類的實例,描述了出現在一段編碼中的 錯誤條件。當條件生成時,錯誤將引發異常。
Java異常類層次結構圖:
Java異常類層次結構圖

注意:異常和錯誤的區別:異常能被程序本身可以處理,錯誤是無法處理。
運行時異常:都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標越界異常)等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度盡可能避免這類異常的發生。

  運行時異常的特點是Java編譯器不會檢查它,也就是說,當程序中可能出現這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯通過。
   非運行時異常 (編譯異常):是RuntimeException以外的異常,類型上都屬於Exception類及其子類。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM