1. 程式人生 > >【Java】類與物件總結

【Java】類與物件總結

概述:物件在程式中是通過一種抽象資料型別來描述的,這種抽象資料型別稱為類;類表示一個有共同特徵的物件集合,物件是一個具體的概念,是類的一個具體的例項。

類中包含靜態屬性和動態特徵,作為一種複合資料型別,可以在程式中進行類的定義,類定義完成後,通過類來定義類的物件,通過構造方法為物件進行初始化,然後通過呼叫物件的方法來實現程式需要的功能。

一、物件的初始化:
(1)宣告物件:通知編譯器利用指定標識對指定型別的變數進行引用,沒有為物件在記憶體中分配相應的地址空間
用類名定義物件,類表示物件的型別;

例如:Circle defCircle;

(2)例項化物件:為物件向系統申請記憶體,同時呼叫類的構造方法為物件進行初始化,類中可以定義多個過載的構造方法。(這裡過載就是說名字相同,但是引數不同的方法)

二、構造方法
作用:如果沒有構造方法,那麼每建立一個例項物件,都要寫程式初始化物件的所有變數;有了構造方法,一個物件在建立的同時。就完成了所有的初始化工作。一句話總結就是:在建立類的物件的同時,初始化類的例項物件。

特點:
1.方法名和類名相同;
2.沒有返回值,方法頭定義不需要返回型別修飾符;
3.使用者不能直接呼叫構造方法;
4.構造方法在使用者建立物件的時候,由系統自動呼叫執行;
5.構造方法的作用是對物件進行初始化;
6.修飾符只能是訪問控制修飾符(private、public、protected),不能是abstract、static、final等;
7.當沒有定義構造方法的時候,系統會自動為該類預設定義一個空構造方法,即為變數自動賦初值。物件的初值為“null”。

三、靜態屬性的定義
(1)修飾符:public、protected、private、final、static、transient(變數為臨時變數)、volatile(多執行緒程式中,用來說明備份變數)的一個或多個組合(例如public final…);
(2)靜態域static(類變數)
靜態域屬於整個類的成員變數,它儲存在類的記憶體區域的公共儲存單元(資料區)中,該類的物件訪問的都是同一塊區,獲取的是同一個值,如果一個物件修改了,那變化會應用到所有物件中;

記憶體中的五大區域
—區域性變數,當局部變數的作用域,被執行完畢之後,區域性變數就會被系統立即回收
—程式設計師手動申請的位元組空間,Malloc calloc realloc
BBS段

—-未被初始化的全域性變數和靜態變數 一般初始化就回收,並轉存到資料段中
資料段(常量區)–已經被初始化的全域性靜態變數常量資料,程式結束的時候才會被回收
程式碼段—-儲存程式碼,儲存程式的程式碼

(3)靜態初始化器
Q:靜態屬性位於公共資料區,屬於整個類的屬性,如何進行初始化?
A:靜態初始化器。
Q:靜態初始化的時機?
A:當所屬類被載入到記憶體時進行。

特點:
1.靜態初始化器是對類自身進行初始化,構造方法是對物件進行初始化;
2.靜態初始化器是在類載入進記憶體時由系統自動呼叫執行的,而構造方法是在使用關鍵字new建立物件時,由系統自動執行的,new後面是構造方法。

實際上,new一個物件可以分成兩步:
1.使類載入進記憶體:Class t = class.forName(“類名”);
【執行這一步的時候,會產生異常,因為涉及到檔案讀寫(與外部互動的過程)】
2.啟動靜態初始化器:Circle c = (類名)t.newInstance()

(4)靜態方法:
a.靜態方法屬於整個類,在記憶體中分配公共的記憶體空間;而非靜態方法屬於某個物件的方法,只有在物件建立的時候才為該物件的方法分配記憶體空間;
b.靜態方法又稱為類方法,它不能直接操縱和處理類的非靜態域,只能處理屬於整個域的成員變數,也就是靜態域;
c.呼叫靜態方法時,可以不用建立物件,直接用類名作為方法名的字首

(5)最終域final

final放在類的宣告中,說明該類無法給子類繼承,放在方法中,說明該類的子類無法覆蓋父類的方法,即無法實現多型。

四、引數傳遞方式:
根據引數的資料型別自動決定:
(1)賦值呼叫傳遞
引數為:整型、實型、字元型、布林型;
(2)引用傳遞
引數為:類或者陣列型別;

五、方法的過載:
是指在同一個類中,定義了方法名稱相同但方法引數不同的多個方法,用來實現多個不同的功能要求。只能通過引數表來區分過載的方法,不能通過返回值型別來區分。

六、this關鍵字
當其他變數已經在另一個方法中被初始化,在當前方法中要呼叫該變數時,可以簡寫成this,而且要寫在最前面。