2.面向對象__參數傳遞_重載_成員變量局部變量_構造器_靜態初始化塊

面向對象:
經過類來直接描述現實世界中客觀存在的事物
基本特徵:封裝,繼承,多態
在Java語言中,除了8個基本數據類型值以外,一切都是對象。
初始化塊總在構造器執行以前被調用,靜態初始化塊用於初始化類 。

構造器是一個類建立對象的根本途徑,若是一個類沒有構造器,這個類一般沒法建立實例。若是類沒有編寫構造器,系統會爲該類提供一個默認的構造器。一旦程序員爲一個類提供了構造器,系統將再也不爲該類提供構造器。
構造器之間調用只能用this調用,而且調用必須做爲構造器執行體的第一條語句。

參數傳遞機制
Java參數傳遞方式只有一種:
值傳遞
,將實際參數值的副本傳入方法內,
參數自己不會受到任何影響

形參個數可變方法:

'''java

public void mainMethod() {
this.test(new String[]{"111", "222"});
}

public void test(String... names) {
for (String name : names) {
System.out.println(name);
}
}

'''程序員

方法可接受任意多個參數值,多個參數值被當成數組傳入。可變形參只能放在方法參數最後一個,因此一個方法最多隻能有一個可變形參。

方法重載
同一個類裏定義多個同名方法,
形參列表不一樣便可

成員變量和局部變量

成員變量:(
不需顯示初始化,在類的準備階段或建立類實例的時候進行默認初始化
  • 實例變量
  • 類成員變量(static修飾)
局部變量:(
除了形參外都必須顯示初始化
  • 方法形參(方法簽名中定義的變量)
  • 方法內局部變量(方法內部定義的變量)
  • 代碼塊局部變量(在代碼塊中定義的局部變量)
形參初始化:
當在類或實例對象調用方法時,系統會在該方法棧區內爲全部的形參分配內存空間,並將實參值賦給形參。
成員變量初始化及內存中運行機制
class Person{
public String name;
public static int age;
}

class PersonTest{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1.name = "zhangsan";
}
}
1. 第一次使用Person,先加載Person.class類並進行初始化,系統會在堆中爲該類分配空間,並建立Class對象
2.建立實例對象
Person p1 = new Person()
,實例變量 name在建立實例時分配內存空間並初始化值的
p1.name = "zhangsan"


局部變量的初始化和內存中的運行機制
局部變量定義後必須通過顯示初始化後才能使用,定義局部變量後,系統並未爲這個變量分配內存空間,直到等到程序爲這個變量賦初始值時,系統纔會爲局部變量分配內存,並將初始化值保存早這塊內存中
局部變量不屬於任何類或實例,它老是保存在方法的棧內存中
棧內存中的變量無須系統垃圾回收,每每隨方法或代碼塊的運行結束而結束,局部變量的做用域從初始化該變量開始,直到方法或代碼塊運行結束。由於局部變量只保存基本類型的值或對象引用,所以局部變量所佔的內存比較小。
封裝

將對象的成員變量和實現細節隱藏起來,不容許外部直接訪問。
將方法暴露出來,讓方法來控制對這些成員變量進行安全的訪問和操做
訪問控制級別 由小到大: private --> default --> protected --> public

private
default
protected
public
同一個類中
同一個包中

子類中


全局範圍



Java默認爲全部源文件導入java.lang包下的全部類,因此在Java程序中使用String,System類時都無須使用import語句來導入這些類。

繼承
每一個子類只有一個直接父類。
方法重寫要遵循「兩同兩小一大」規則
兩同:方法名和形參列表相同
兩小:返回值類型,子類比父類更小或相等,拋出異常,子類比父類更小或相等
一大:方法訪問權限,子類的訪問權限應比父類的訪問權限大或相等

建立子類對象時,不只會爲子類對象的實例變量分配內存,也會爲從
父類繼承的實例變量分配內存

當調用子類構造器初始化子類對象時,父類構造器總會在子類構造器以前執行,以此類推。建立任何Java對象,
最早執行的老是java.lang.Object類的構造器

建立任何對象老是
從該類所在繼承樹最頂層類的構造器開始執行
,而後依次向下執行,最後才執行本類的構造器。

多態
父類引用指向子類對象。在進行對象轉換前,使用
instanceof 進行判斷來避免異常
初始化塊
一個類裏能夠有多個初始化塊,前面定義的初始化塊先執行,後面定義的初始化塊後執行。
初始化塊的修飾符只能是static,使用static修飾的初始化塊被稱爲靜態初始化塊。
建立Java對象時,老是先調用初始化塊,在執行構造器方法以前執行。
public class Test{
{
a = 6
;
}
int a
= 9
;
public static void main(String[] args){
System.out.println(new Test().a); // 9
}
}
int a = 9 ;比 代碼塊a=6後執行。
Java在建立對象時,
系統會
先爲該對象的全部
實例變量
分配內存
接着對
這些實例變量進行初始化,順序爲: 初始化塊或聲明時指定的初始值(按源代碼中出現順序執行),再執行構造器裏指定的初始值。
注意:實際上初始化塊只是一個假象,編譯後的class類中,初始化塊的代碼會被編譯到每一個構造器中,且位於構造器的全部代碼以前。

靜態初始化塊
JVM第一次主動使用某個類時,在類
準備階段
爲全部
靜態成員變量分配內存空間
,在
初始化階段
初始化成員變量,靜態代碼塊與聲明初始化按照源代碼順序執行
相關文章
相關標籤/搜索