java面向對象面向對象基礎 類對象實例1 成員屬性2 成員方法構造方法構造代碼塊一般方法面向對象三大特征 封裝繼承多態1 封 裝2 繼 承3 多 態4 關鍵字 this-super-static-final抽象類和接口1 抽象類 abstract2 接 口包和常見的軟件包1 包定義包用package關鍵字2 常見的軟件包
成員屬性和局部變量的區別:
成員屬性 直接定義在類中。 局部變量 定義在方法中,參數上,語句中。成員屬性 在這個類中有效。 局部變量 只在自己所屬的大括號內有效,大括號結束,局部變量失去作用域。成員屬性 存在于堆內存中,隨著對象的產生而存在,消失而消失。 局部變量 存在于棧內存中,隨著所屬區域的運行而存在,結束而釋放。1.2.1 構造方法
定義: 用于給對象進行初始化,是給與之對應的對象進行初始化。
特點: 1、該方法的名稱和所在類的名稱相同。 2、不需要定義返回值類型。 3、該方法沒有具體的返回值。
記住: 所有對象創建時,都需要初始化才可以使用。
類中沒有構造方法: 一個類在定義時,如果沒有定義過構造方法,那么該類中會自動生成一個空參數的構造方法,為了方便該類創建對象,完成初始化。如果在類中自定義了構造方法,那么默認的構造方法就沒有了。
類中多個構造方法 一個類中,可以有多個構造方法,因為它們的方法名稱都相同,所以只能通過參數列表來區分。所以,一個類中如果出現多個構造方法。它們的存在是以重載體現的。
1.2.2 構造方法和一般方法的區別
定義格式不同調用方式不同 : 構造方法是在對象創建時,就被調用,用于初始化。 一般方法是對象創建后,需要調用才執行。執行次數不同: 構造方法的初始化動作只執行一次。 一般方法可以被調用很多次。私有僅僅是封裝的一種體現形式而已。 屬性是用于存儲數據的,直接被訪問,容易出現安全隱患。 所以,類中的屬性通常被私有化,并對外提供公共的訪問方法。 對于私有屬性的訪問方位一般有兩個:setter(),getter()。匿名對象
使用場景: 1、當對方法只進行一次調用的時候,可以使用匿名對象。 2、當對象對成員進行多次調用時,不能使用匿名對象。必須給對象起名字。
繼承體現了復用性原則。 繼承的弊端是打破了封裝性。 單繼承:一個類只能有一個父類。Java只支持單繼承。 多繼承:一個類可以有多個父類。Java不直接支持類的多繼承。
為什么不支持多繼承?
因為當一個類同時繼承兩個父類時,兩個父類中有相同的功能,那么子類對象調用該功能時,運行哪一個呢?但是Java支持多重繼承。A繼承B B繼承C C繼承D。
繼承情況中,成員的特點:
成員屬性 父類和子類中出現同名變量,子類調用,值是子類的父類和子類中一般不會出現同名變量,因為父類中有,子類中繼承即可。成員方法 父類和子類中出現了一模一樣的方法時,建立子類對象會運行子類中的方法。這叫做重寫(覆蓋,覆寫)。重寫體現了擴展性原則。子類覆蓋父類時,必須要保證,子類方法的權限必須大于等于父類方法權限可以實現繼承。否則,編譯失敗。覆蓋時,要么都靜態,要么都不靜態。 靜態只能覆蓋靜態,或者被靜態覆蓋。構造方法
發現子類構造方法運行時,先運行了父類的構造方法。 原因:子類的所有構造方法中的第一行,其實都有一條隱身的語句super();super(): 表示父類的構造方法,并會調用于參數相對應的父類中的構造方法。為什么子類對象初始化時,都需要調用父類中的方法?因為子類繼承父類,會繼承到父類中的數據,所以必須要看父類是如何對自己的數據進行初始化的。所以子類在進行對象初始化時,先調用父類的構造方法,這就是子類的實例化過程。
注意事項:
子類中所有的構造方法都會默認訪問父類中的空參數的構造方法,因為每一個子類構造內第一行都有默認的語句super(); 如果父類中沒有空參數的構造方法,那么子類的構造方法內,必須通過super語句指定要訪問的父類中的構造方法。如果子類構造方法中用this來指定調用子類自己的構造方法,那么被調用的構造方法也一樣會訪問父類中的構造方法。Animal a = new Cat();可以調用子類中重寫的方法。多態的前提
必須要有關系,比如繼承、或者實現。通常會有覆蓋操作。多態的好處:提高了程序的擴展性。
多態的弊端: 當父類引用指向子類對象時,雖然提高了擴展性,但是只能訪問父類中具備的方法,不可以訪問子類中特有的方法。(前期不能使用后期產生的功能,即訪問的局限性)如果想用子類對象的特有方法,如何判斷對象是哪個具體的子類類型呢? 可以通過一個關鍵字 instanceof ,用來判斷對象是否實現了指定的接口或繼承了指定的類。格式:<對象 instanceof 類型> ,判斷一個對象是否所屬于指定的類型。Student instanceof Person = true;//student繼承了person類多態的代碼class A1{ void teaching(){ System.out.println("教課"); } void fishing(){ System.out.println("釣魚"); }}class A11 extends A1{ void teaching(){ System.out.println("JAVA"); } void watching(){ System.out.println("看電影"); }}class { public static void main(String[] args) { A1 x = new A11();//向上轉型 子-->父 x.teaching(); x.watching(); //錯誤,不能訪問的。 A11 y = (A11)x; //向下轉型 父-->子 y.watching(); //在多態中,自始自終都是子類對象在做著類型的變化。 }}封裝:隱藏實現細節,讓代碼模塊化。體現復用性(模塊化)原則。 繼承:擴展已經存在的代碼模塊(類)。體現擴展性原則。 多態:在繼承的基礎上,讓子類功能能被父類引用變量調用(向后兼容)。進一步體現擴展性(降低耦合性)原則。
this關鍵字 this代表本類對象。 this可以調用成員。包括成員屬性和成員方法(一般方法和構造方法)。
super關鍵字
this:代表是本類類型的對象引用。 super:代表是子類所屬的父類中的內存空間引用。
super()和this()是否可以同時出現的構造方法中? 兩個語句只能有一個定義在第一行,所以只能出現其中一個。
super()或者this():為什么一定要定義在第一行? 因為super()或者this()都是調用構造方法,構造方法用于初始化,所以初始化的動作要先完成。
static關鍵字 static是一個修飾符。 用于修飾成員。包括成員屬性和成員方法。 體現了復用性原則。
特點:
想要實現對象中的共性數據共享。可以將這個數據進行靜態修飾。被靜態修飾的成員,可以直接被類名所調用。也就是說,靜態的成員多了一種調用方式。類名.靜態成員。靜態隨著類的加載而加載。而且優先于對象存在。注意:
有些數據是對象特有的數據,是不可以被靜態修飾的。靜態方法只能訪問靜態成員,不可以訪問非靜態成員。 因為靜態方法加載時,優先于對象存在,所以沒有辦法訪問對象中的成員。靜態方法中不能使用this,super關鍵字。 因為this代表對象,而在靜態時,有可能沒有對象,所以this無法使用。主方法是靜態的。成員屬性和靜態變量的區別:
成員屬性所屬于對象。所以也稱為實例變量。 靜態變量所屬于類。所以也稱為類變量。成員屬性存在于堆內存中。 靜態變量存在于方法區中。成員屬性隨著對象創建而存在。隨著對象被回收而消失。 靜態變量隨著類的加載而存在。隨著類的消失而消失。成員屬性只能被對象所調用 。 靜態變量可以被對象調用,也可以被類名調用。成員屬性可以稱為對象的特有數據,靜態變量稱為對象的共享數據final關鍵字 final是一個修飾符,可以修飾類,方法,變量。
抽象類的特點:
抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(可以描述類和方法,不可以描述變量)。抽象方法只定義方法聲明,并不定義方法實現。抽象類不可以被創建對象(實例化)。只有通過子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后,該子類才可以實例化。否則,該子類還是一個抽象類。抽象類的細節:
抽象類和一般類沒有太大的區別,都是在描述事物。 抽象類中可以有構造方法。抽象類中可以有一般方法。抽象關鍵字abstract和哪些不可以共存?final , private , static 抽象類中可以不定義抽象方法。 抽象方法目的僅僅為了不讓該類創建對象。接口的定義 1. 是用關鍵字interface定義的。 2. 接口中包含的成員,最常見的有全局常量、抽象方法。 注意:接口中的成員都有固定的修飾符。     成員屬性:public static final      成員方法:public abstract 
接口的特點  1. 接口中有抽象方法,說明接口不可以實例化。接口的子類必須實現了接口中所有的抽象方法后,該子類才可以實例化。否則,該子類還是一個抽象類。  2. 類與類之間存在著繼承關系,類與接口中間存在的是實現關系。即繼承用extends  ;實現用implements ;  3. 接口和類不一樣的地方是接口可以被多實現,這就是多繼承改良后的結果。java將多繼承機制通過多實現來體現。   4. 一個類在繼承另一個類的同時,還可以實現多個接口。所以接口的出現避免了單繼承的局限性。還可以將類進行功能的擴展。  5. 其實java中是有多繼承的。接口與接口之間存在著繼承關系,接口可以多繼承接口。  6. 接口都用于設計上,設計上的特點:(可以理解主板上提供的接口)
抽象類與接口
總結java中的四種權限:
| 范圍 | public | protected | default | private | 
|---|---|---|---|---|
| 同一個類中 | ok | ok | ok | ok | 
| 同一包中 | ok | ok | ok | |
| 子類 | ok | ok | ||
| 不同包中 | ok | 
import - 導入:類名稱變長,寫起來很麻煩。為了簡化,使用了一個關鍵字:import,可以使用這個關鍵字導入指定包中的類。記住:實際開發時,到的哪個類就導入哪個類,不建議使用*. import packa.*: 這個僅僅是導入了packa當前目錄下的所有的類。不包含子包。 import packa.abc.*: 導入了packa包中的子包abc下的當前的所有類。如果導入的兩個包中存在著相同名稱的類。這時如果用到該類,必須在代碼中指定包名。
java.applet :
application+let –>客戶端java小程序。server+let –> servlet 服務端java小程序。jar :java的壓縮包,主要用于存儲類文件,或者配置文件等。
命令格式:jar –cf 包名.jar 包目錄解壓縮:jar –xvf 包名.jar 將jar包目錄列表重定向到一個文件中:jar –tf 包名.jar >c:/1.txt新聞熱點
疑難解答