您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關帶你了解Java面向對象的基礎,類,變量,方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
抽象性、封裝性、繼承性和多態性。
抽象性分為過程抽象和數據抽象。
封裝將數據以及加在這些數據上的操作組織在一起,成為有獨立意義的構件。外部無法直接訪問封裝的數據,從而保證了這些數據的正確性。
如果外部需要訪問類里面的數據,就必須通過接口。接口規定了可對一個特定的對象發出哪些請求。
繼承是一種聯結的層次模型,并允許和鼓勵類的重用,它提供給了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類)。
多態是指允許不同類的對象對同一消息做出響應。
[類修飾符] class 類名 [extends 父類名] [implements 接口名列表]
在定義類時,只是通知編譯器需要準備多大的內存空間,并沒有為它分配內存空間。只有用類創建了對象后,才會真正的占用內存空間。
Java規定:如果成員變量沒有被顯示賦初值,系統將自動為它們賦值。
變量類型 | 定義 |
---|---|
成員變量 | 定義在類里面,和方法處于同一層次 |
局部變量 | 定義在方法里面 |
默認情況下,成員變量是實例變量,在外部需要對象才能操作;如果用static修飾,就成為靜態成員,也稱為類變量,可以直接操作。如果前面加上關鍵字final ,它就是一個常量。
根據訪問權限來區分成員變量 或方法
public | protected | 默認 | private | |
---|---|---|---|---|
本類內部 | √ | √ | √ | √ |
同一包中的子類 | √ | √ | √ | × |
同一包中非子類 | √ | √ | √ | × |
不同包中的子類 | √ | 繼承訪問 | × | × |
不同包中非子類 | √ | × | × | × |
根據是否是靜態來區分
特點 | |
---|---|
實例成員變量 | 1.如果所屬的對象沒有被創建,實例成員變量就不存在;2.在類的外部使用它,通過“對象名.變量名”來訪問;3.在類的內部,實例成員方法也可以直接訪問實例成員變量;4.不同對象擁有不同的實例成員變量,互不影響 |
靜態成員變量 | 1.被類的所有對象所共享,被稱為類變量;2.它不屬于某個具體對象,也不是保存在某個對象的內存區域中,而是保存在類的公共存儲單元。在類的對象被創建之前使用;3.可以通過對象名.變量名或者類名.變量名訪問;4.它是一個公共變量,無論哪個對象改變了它的值,對其他所有該類對象都有效 |
*局部變量必須先定義后使用。
局部變量沒有訪問權限修飾符,不能用public、private、和protected來修飾。這是因為它只能在定義它的方法內部使用 |
局部變量不能用static修飾,沒有“靜態局部變量”,這是Java和C/C++的區別 |
系統不會自動問局部變量賦初值,但對于成員變量,系統會自動賦初值。基本類型為0,復合類型的值為null |
局部變量的作用域僅限于定義它的方法,在方法外部無法訪問它。成員變量的作用域在整個類內部都是可見的,所有成員方法都可以使用它。如果訪問權限允許,還可以在類的外部使用它 |
局部變量的生存周期與方法的執行期相同。當方法執行到定義局部變量的語句時,局部變量被創建;執行到它所在的作用于的最后一條語句時,局部變量被銷毀。類的成員變量,如果是實例成員變量,它和對象的生存期相同;靜態成員變量的生存期是整個程序運行期 |
在同一個方法中,不允許有同名的局部變量;在不同的方法中,可以有同名的局部變量,互不干涉 |
局部變量可以與成員變量同名,且在使用時,局部變量有更高的優先級 |
方法類型 | |
---|---|
實例方法 | 必須在類實例化后通過對象來調用 |
靜態方法(類方法) | 可以在類實例化之前就使用 |
public class test{ public void showMsg(){ System.out.println("This is showMsg method."); } public void callOther(){ showMsg(); } public static void main(String args[ ]){ test ob = new test();// ?為什么不直接調用 ob.callOther(); } }
main()方法是一個靜態方法,它由系統來調用,系統在調用它的時候,并沒有創建一個test的對象,而callOther()和showMsg()方法都是實例方法,它們被調用時,都必須有對象的存在。所以必須在main()中先創建一個對象才能調用這兩個方法。而callOther()本身就是實例方法,它在執行時,一定有對象存在的。基于這個前提,callOther()可以直接調用showMsg()方法。
**要注意實參和形參的區別。
一般形式
構造方法名([參數列表]){ [this([參數列表]);] | [super([參數列表])]; 語句序列 } *其中this是調用其他的構造方法,super是調用父類的構造方法,它們都必須放在其他語句的前面。
注意事項
構造方法名字必須和類名字完全相同 |
除了訪問權修飾符之外,不能有其他任何修飾符,也就不能有返回值 |
盡管沒有返回值,但不能用“void”修飾 |
構造方法不能用static和final來修飾。一般也不用private修飾,這會導致無法在外部創建對象 |
構造方法不能由對象顯示調用。一般通過new關鍵字來調用,或者用this,super來調用 |
構造方法的參數列表可以為空,也可以有參數,根據參數的有無,可以將構造方法分為無參數的構造方法和帶參數的構造方法 |
用戶定義的類可以擁有多個構造方法,但要求參數列表不同 |
如果用戶定義的類未提供任何構造方法時,系統會自動為其提供一個無參數的構造方法 |
構造方法的調用
構造方法的重載
Java允許定義帶參數的構造方法,而且這種帶參的構造方法還可以多個,前提是參數列表有區別,這種現象稱為構造方法的重載。
如果程序員至少定義了一個構造方法,那么系統不會再提供不帶參的構造方法。
一般形式
[訪問權限修飾符]static 返回值類型 方法名([參數列表]){ 語句序列 }
與實例方法區別
一般形式
static{ 語句序列 }
注意事項
靜態代碼塊只能定義在類里面,它獨立于任何方法,不能定義在方法里面 |
靜態代碼塊里面的變量都是局部變量,只在本塊內有效 |
靜態代碼塊會在類被加載時自動執行,而無論加載者是JVM還是其他類 |
如果靜態代碼塊所在的類被創建了多個對象實例,只有第一個對象被創建時才執行靜態代碼塊 |
一個類中允許定義多個靜態代碼塊,執行順序根據定義順序進行 |
靜態代碼塊只能訪問類的靜態成員,而不允許訪問實例成員 |
看完上述內容,你們對帶你了解Java面向對象的基礎,類,變量,方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。