java學習筆記----java基礎06:類和對象

1.類的概念

  • 類是對具有相同屬性和相同行爲的對象的抽象。
  • 類表示了對象的類別是一種自定義的數據類型;是開發人員爲解決實際問題而自己定義的。
  • 類是創建對象的模板和類型,對象是類的實例。
  • 注意:一個java文件裏可以寫多個類 ,但是其中只能有一個類用public 修飾,並且這個java文件的名稱必須用這個public類的類名命名。
  • 注意:類的對象的屬性都是先賦值後使用的,如果沒有賦值就直接使用對象的屬性:如果該屬性是引用數據類型,其初始默認值爲null;如果該屬性是int型,其初始默認值爲0。

2.java面向對象有哪些基本特性

面向對象有三大基本特性:封裝、繼承和多態。如果有四個的話,就再加上抽象。

  • 封裝就是將抽象得到的屬性和行爲結合起來,形成一個有機的整體,也就是類。類裏面的一些屬性和方法需要隱藏起來,不希望直接對外公開。但同時提供外部訪問的方法來有限制地訪問需要隱藏的屬性和方法。
  •  繼承是使用已存在的類 的定義作爲基礎建立新類的技術,新類的定義可以增加新的屬性或新的方法,也可以用已存在的類的屬性和方法。
  • 多態是指通過父類型的變量引用不同的子類對象(也就是說子類對象可以直接賦值給父類型變量,來動態調用在不同子類中實現的方法。Java引用變量有兩種類型,分別是編譯時類型和運行時類型,編譯時類型由聲明類型決定,運行時類型由賦值對象的類型決定。如果編譯時類型和運行類型不一致,就會出現所謂多態。
  • 將現實世界中的事物描述爲系統中的類、對象及方法的過程,在這個過程中去除了不相關數據和信息,保留的數據用來實現系統特定的功能。                                                                        

3.構造方法

  •  構造方法的方法名必須與類名相同。
  • 構造方法沒有返回類型,也不能定義爲void ,在方法名前不聲明返回類型。其實構造方法是有返回值的,返回的是剛剛被初始化完成的當前對象的引用。但是爲了和普通方法進行區別,java設計人員規定構造方法不寫返回值,編譯器會通過這一規定識別構造方法,而不是說構造方法真的沒有返回值。
  • 構造方法會通過參數個數、參數類型、參數排列順序來區分不同的構造方法。
  • 如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造方法,這個構造方法不執行任何代碼。但是如果在類定義了有參的構造方法,沒有顯式地定義無參的構造方法,那麼在使用構造方法創建類的對象時,則不能使用默認的無參構造方法,如果實在要用的話,必須顯式的定義無參的構造方法。

 4.靜態與非靜態成員的訪問總結

(1)靜態方法與非靜態方法的使用

  • 靜態的東西總是通過類名直接訪問,無須通過對象來調用。當然通過對象訪問靜態成員也是可以的,但不推薦這樣用。
  • 非靜態成員的東西總是和對象相關聯,也就是說非靜態成員總通過對象來訪問。
  • 靜態成員不可以訪問非靜態成員,反之非靜態成員可以訪問靜態成員。

(2)什麼時候用靜態,什麼時候用非靜態?

  • 靜態方法在類加載到JVM時生成內存,並分配了相應的入口地址。實例方法在程序運行中生成內存,當我們創建第一個對象時,類中的實例方法就分配了入口地址,當再創建對象時,不再分配入口地址,也就是說,方法的入口地址被所有的對象共享,當所有的對象都不存在時,方法的入口地址才被取消。所以靜態方法可以直接調用
  •  實例方法要先生成實例,通過實例調用方法,靜態速度很快,但是多了會佔內存。
  • 靜態內存是連續的,因爲是在程序開始時就生成了,而實例申請的是離散的空間,所以當然沒有靜態方法快,而且靜態內存是有限制的,太多了程序會啓動不了。
  •  類方法常駐內存,實例方法不是,所以類方法效率高但佔內存。
  •  類方法在堆上分配內存,實例方法在堆棧上。 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章