Java面向對象深入篇

1)成員變量和局部變量的區別(本篇學習王偉和傳智劉意)

1.1)在類中的位置不同

成員變量:類中方法外

局部變量:方法定義中或者方法聲明上

1.2)在內存中的位置不同

成員變量:在堆中

局部變量:在棧中

1.3)生命週期不同

成員變量:隨着對象的創建而存在,隨着對象的消失而消失

局部變量:隨着方法的調用而存在,隨着方法的調用完畢而消失

1.4)初始化值不同

成員變量:有默認值

局部變量:沒有默認值,必須定義,賦值,然後才能使用

2)構造器(構造方法、構造函數)

[<modifier>]  <class_name>  ( [<type arg_name >, ..]) {

[<statements>]

}

2.1)格式:

2.1.1)方法名和類名相同

2.1.2)沒有返回值類型,連void都不能有

2.1.3)沒有返回值

2.2)構造器特點:

2.2.1)一個類可以有多個構建器,但這些構造器的參數列表必須不同

2.2.2)每個類都會至少有一個構造器,如果沒有定義構造器,則系統將自動提供一個默認的不帶任何參數的構造器,如果類沒有定義構造器,可以用這個默認的構造起來生成一個對象.推薦:永遠手動自己給出無參構造方法。

2.3)構造器的作用

用於對對象的數據進行初始化。通過構造器來創建對象,使用new 關鍵字來創建一個對象new後面調用的是類中的一個構造器。

2.4)給成員變量賦值的方式

2.4.1)setXxx()

2.4.2)帶參構造方法

2.5)案例

class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

2.5.1)測試

class StudentDemo {
public static void main(String[] args) {
//方式1
Student s1 = new Student();
s1.setName("張三");
s1.setAge(27);
System.out.println(s1.getName()+"---"+s1.getAge());
//方式2
Student s2 = new Student("李四",30);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}

2.5.2)Student s = new Student();做了哪些事情?

(1)把Student.class文件加載到內存

(2)在棧內存爲s開闢空間

(3)在堆內存爲學生對象申請空間

(4)給學生的成員變量進行默認初始化。null,0

(5)給學生的成員變量進行顯示初始化。林青霞,27

(6)通過構造方法給成員變量進行初始化。劉意,30

(7)對象構造完畢,把地址賦值給s變量

wKioL1jKSUCxx54qAAHe6Ka-un4378.png-wh_50

3、this關鍵字

3.1)代表當前類的引用對象

哪個對象調用方法,該方法內部的this就代表那個對象

3.2)this的應用場景:

3.2.1)解決了局部變量隱藏成員變量的問題

3.2.2)其實this還有其他的應用

4:封裝

4.1)隱藏實現細節,提供公共的訪問方式

4.2)好處:

A:隱藏實現細節,提供公共的訪問方式

B:提高代碼的複用性

C:提高代碼的安全性

4.3)設計原則

把不想讓外界知道的實現細節給隱藏起來,提供公共的訪問方式

4.4)private是封裝的一種體現。

封裝:類,方法,private修飾成員變量

4.5)private關鍵字

私有的意義,可以修飾成員變量和成員方法

4.5.1)特點:

被private修飾的後的成員只能在本類中被訪問

4.5.2)private的應用:

以後再寫一個類的時候:

把所有的成員變量給private了

提供對應的getXxx()/setXxx()方法

5、static關鍵字(理解)

5.1)靜態的意思。可以修飾成員變量和成員方法。

5.2)靜態的特點:

A:隨着類的加載而加載

B:優先與對象存在

C:被類的所有對象共享

這其實也是我們判斷該不該使用靜態的依據。

D:可以通過類名調用

既可以通過對象名調用,也可以通過類名調用,建議通過類名調用。

5.3)靜態的內存圖

wKiom1jKSZ6yQ8PSAAM5rJHQMOY231.png-wh_50

靜態的內容在方法區的靜態區

5.4))靜態的注意事項;

A:在靜態方法中沒有this對象

B:靜態只能訪問靜態(代碼測試過)

5.5)靜態變量和成員變量的區別

A:所屬不同

靜態變量:屬於類,類變量

成員變量:屬於對象,對象變量,實例變量

B:內存位置不同

靜態變量:方法區的靜態區

成員變量:堆內存

C:生命週期不同

靜態變量:靜態變量是隨着類的加載而加載,隨着類的消失而消失

成員變量:成員變量是隨着對象的創建而存在,隨着對象的消失而消失

D:調用不同

靜態變量:可以通過對象名調用,也可以通過類名調用

成員變量:只能通過對象名調用

5.6)main方法是靜態的

public:權限最大

static:不用創建對象調用

void:返回值給jvm沒有意義

main:就是一個常見的名稱。

String[] args:可以接收數據,提供程序的靈活性

成員變量、局部變量和靜態變量的區別

http://blog.csdn.net/haovip123/article/details/43883109


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