Java005-面向對象(封裝)

封裝定義

是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。

好處:java

將變化隔離;便於使用;提升重用性;安全性。

封裝原則:數組

將不須要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問。

this:

表明對象。就是所在函數所屬對象的引用。

this到底表明什麼呢?哪一個對象調用了this所在的函數,this就表明哪一個對象,就是哪一個對象的引用。安全

開發時,何時使用this呢?
在定義功能時,若是該功能內部使用到了調用該功能的對象,這時就用this來表示這個對象。
this 還能夠用於構造函數間的調用。

調用格式:jvm

this(實際參數);
this對象後面跟上 .  調用的是成員屬性和成員方法(通常方法);
this對象後面跟上 () 調用的是本類中的對應參數的構造函數。

注意:函數

用this調用構造函數,必須定義在構造函數的第一行。由於構造函數是用於初始化的,因此初始化動做必定要執行。不然編譯失敗。

static:

★★★ 關鍵字,是一個修飾符,用於修飾成員(成員變量和成員函數)。

特色:this

想要實現對象中的共性數據的對象共享。能夠將這個數據進行靜態修飾。
被靜態修飾的成員,能夠直接被類名所調用。也就是說,靜態的成員多了一種調用方式。類名.靜態方式。
靜態隨着類的加載而加載。並且優先於對象存在。

弊端:code

有些數據是對象特有的數據,是不能夠被靜態修飾的。由於那樣的話,特有數據會變成對象的共享數據。這樣對事物的描述就出了問題。因此,在定義靜態時,必需要明確,這個數據是不是被對象所共享的。
靜態方法只能訪問靜態成員,不能夠訪問非靜態成員。
由於靜態方法加載時,優先於對象存在,因此沒有辦法訪問對象中的成員。
靜態方法中不能使用this,super關鍵字。
由於this表明對象,而靜態在時,有可能沒有對象,因此this沒法使用。
主函數是靜態的。

何時定義靜態成員呢?或者說:定義成員時,到底需不須要被靜態修飾呢?對象

成員分兩種:

成員變量生命週期

(數據共享時靜態化)
該成員變量的數據是不是全部對象都同樣:
若是是,那麼該變量須要被靜態修飾,由於是共享的數據。
若是不是,那麼就說這是對象的特有數據,要存儲到對象中。

成員函數內存

(方法中沒有調用特有數據時就定義成靜態)
若是判斷成員函數是否須要被靜態修飾呢?
只要參考,該函數內是否訪問了對象中的特有數據:
若是有訪問特有數據,那方法不能被靜態修飾。
若是沒有訪問過特有數據,那麼這個方法須要被靜態修飾。

成員變量和靜態變量的區別:

成員變量所屬於對象。因此也稱爲實例變量。靜態變量所屬於類。因此也稱爲類變量。
成員變量存在於堆內存中。靜態變量存在於方法區中。
成員變量隨着對象建立而存在。隨着對象被回收而消失。 靜態變量隨着類的加載而存在。隨着類的消失而消失。
成員變量只能被對象所調用 。靜態變量能夠被對象調用,也能夠被類名調用。

因此,成員變量能夠稱爲對象的特有數據,靜態變量稱爲對象的共享數據。
靜態的注意:

靜態的生命週期很長。

靜態代碼塊:

就是一個有靜態關鍵字標示的一個代碼塊區域。定義在類中。

做用:

能夠完成類的初始化。靜態代碼塊隨着類的加載而執行,並且只執行一次(new 多個對象就只執行一次)。若是和主函數在同一類中,優先於主函數執行。

Public:

訪問權限最大。

static:

不須要對象,直接類名便可。

void:

主函數沒有返回值。

Main:

主函數特定的名稱。

(String[] args):

主函數的參數,是一個字符串數組類型的參數,jvm調用main方法時,傳遞的實際參數是 new String[0]。
jvm默認傳遞的是長度爲0的字符串數組,咱們在運行該類時,也能夠指定具體的參數進行傳遞。能夠在控制檯,運行該類時,在後面加入參數。參數之間經過空格隔開。jvm會自動將這些字符串參數做爲args數組中的元素,進行存儲。
靜態代碼塊、構造代碼塊、構造函數同時存在時的執行順序:靜態代碼塊 à 構造代碼塊 à 構造函數;

生成Java幫助文檔:

命令格式:javadoc –d 文件夾名 –auther –version *.java
/**     //格式
*類描述
*@author 做者名
*@version 版本號
*/
/**
*方法描述
*@param  參數描述
*@return  返回值描述
*/
相關文章
相關標籤/搜索