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變量
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)靜態的內存圖
靜態的內容在方法區的靜態區
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