摘要:調用格式實際參數對象后面跟上調用的是成員屬性和成員方法一般方法對象后面跟上調用的是本類中的對應參數的構造函數。而且優先于對象存在。所以,成員變量可以稱為對象的特有數據,靜態變量稱為對象的共享數據。
封裝定義
是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
好處:
將變化隔離;便于使用;提高重用性;安全性。
封裝原則:
將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問。this:
代表對象。就是所在函數所屬對象的引用。
this到底代表什么呢?哪個對象調用了this所在的函數,this就代表哪個對象,就是哪個對象的引用。
開發時,什么時候使用this呢? 在定義功能時,如果該功能內部使用到了調用該功能的對象,這時就用this來表示這個對象。 this 還可以用于構造函數間的調用。
調用格式:
this(實際參數); this對象后面跟上 . 調用的是成員屬性和成員方法(一般方法); this對象后面跟上 () 調用的是本類中的對應參數的構造函數。
注意:
用this調用構造函數,必須定義在構造函數的第一行。因為構造函數是用于初始化的,所以初始化動作一定要執行。否則編譯失敗。static:
★★★ 關鍵字,是一個修飾符,用于修飾成員(成員變量和成員函數)。
特點:
想要實現對象中的共性數據的對象共享。可以將這個數據進行靜態修飾。 被靜態修飾的成員,可以直接被類名所調用。也就是說,靜態的成員多了一種調用方式。類名.靜態方式。 靜態隨著類的加載而加載。而且優先于對象存在。
弊端:
有些數據是對象特有的數據,是不可以被靜態修飾的。因為那樣的話,特有數據會變成對象的共享數據。這樣對事物的描述就出了問題。所以,在定義靜態時,必須要明確,這個數據是否是被對象所共享的。 靜態方法只能訪問靜態成員,不可以訪問非靜態成員。 因為靜態方法加載時,優先于對象存在,所以沒有辦法訪問對象中的成員。 靜態方法中不能使用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 返回值描述 */
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73191.html
摘要:靜態塊代碼初始化其實,整個靜態代碼塊可以看作是一個靜態成員。和普通的非靜態成員初始化一樣,它的執行也發生在構造器調用之前,并且每當創建對象之前都會調用。口繼承中涉及的初始化大的原則是沒有父類,就沒子類。 這個教程,咱們來對Java中設計到的初始化規則,或者說初始化順序,來做一下匯總,這里我基本上把Java中,默認初始化,靜態成員初始化,非靜態成員初始化,靜態代碼塊,非靜態代碼塊,以及繼...
摘要:面向對象與面向過程的區別要知道,二者并不是非此即彼,而是相輔相成的。而面向過程,則在微觀上對對象內部進行具體的實現。面向對象的三大特性說到面向對象,就不得不說其三大特性封裝繼承和多態。封裝封裝是面向對象最基礎的特性。 作者:伯特出處:github.com/ruicbAndroid/LoulanPlan聲明:本文出自伯特的《LoulanPlan》,轉載務必注明作者及出處。 剛學習 Jav...
摘要:會造成內存浪費的問題構造函數繼承聲明父類聲明子類生成實例組合式繼承組合式繼承是汲取了兩者的優點,既避免了內存浪費,又使得每個實例化的子類互不影響。 寫在前面 既然是淺談,就不會從原理上深度分析,只是幫助我們更好地理解... 面向對象與面向過程 面向對象和面向過程是兩種不同的編程思想,剛開始接觸編程的時候,我們大都是從面向過程起步的,畢竟像我一樣,大家接觸的第一門計算機語言大概率都是C語...
摘要:對象是公布其接口。節選自百度百科我對于封裝的理解,可能還有一個步驟就是抽離,首先你要清楚在一個對代碼中你應該抽離那些屬性方法,有了這些為基礎才能更好的做好封裝。節選自百度百科因為是沒有重載的概念的所以要自己編寫邏輯完成重載。 1. 前言 2. 封裝 3. 繼承 4. 多態 5. 總結 1. 前言 了解過面向對象的同學應該都知道,面向對象三個基本特征是:封裝、繼承、多態,但是對于這三...
閱讀 2813·2023-04-25 22:51
閱讀 2045·2021-10-11 10:58
閱讀 3312·2019-08-30 10:49
閱讀 1875·2019-08-29 17:09
閱讀 3139·2019-08-29 10:55
閱讀 844·2019-08-26 10:34
閱讀 3486·2019-08-23 17:54
閱讀 982·2019-08-23 16:06