標籤:運行 思想 引用 bst ted amp 記憶體 必須 相同
一、物件導向和面向過程
面向過程:Procedure Oriented 是一種自頂向下的編程
物件導向:Object Oriented 是將事物高度抽象化,必須先建立抽象模型(有屬性和行為),之後直接使用模型就行
例:人把大象裝進冰箱
面向過程:
1)開啟冰箱
2)把大象放進去
3 )關閉冰箱門
物件導向:
人{
開啟(冰箱){
冰箱.開開()
}
操作(大象){
大象.進入(冰箱)
}
關閉(冰箱){
冰箱.合上()
}
}
大象{
進入(冰箱){ }
}
冰箱{
開開(){ }
合上(){ }
}
物件導向的三大特徵:封裝、繼承和多態
二、類的相關知識
類是對現實生活中一類具有共同特徵的事物的抽象,比如所有的鳥都會飛,由屬性(成員變數或Field) &行為(成員方法或Method)組成。對象是實際存在的該類事物的每個個體,是類的具體執行個體化。
成員變數和局部變數
在方法體外,類體內聲明的變數稱為成員變數,分為執行個體變數(不以static修飾)和類變數(以static修飾),執行個體變數存在於對象所在的堆記憶體中,可以有修飾符,如果在聲明的時候,不顯式的賦值,
那麼不同資料類型會有不同的預設初始化值;在方法體內部聲明的變數稱為局部變數,分為形參(方法簽名中定義的變數)、方法局部變數(在方法內定義)、代碼塊局部變數(在代碼塊內定義),
局部變數存在於棧記憶體中,沒有修飾符,與所在的方法修飾符相同,一定要顯式的賦值(局部變數沒有預設初始化值)
package com.yyx.pratice;public class Person { // 成員變數 private String name; private int age; // 成員方法 public void eatFood() { //局部變數 String foodName = "漢堡"; System.out.println("我在吃" + foodName); } public static void main(String[] args) { Person person=new Person(); person.eatFood(); }}
三、類的記憶體分析
所有的對象名稱都在棧記憶體中儲存,而對象的具體內容則儲存在對應的堆記憶體中,必須使用new關鍵字才能開闢堆記憶體空間
類屬於引用資料類型,引用資料類型就是指一段堆記憶體空間可以同時被多個棧記憶體指向
package com.yyx.pratice;public class TestZoom { public static void main(String[] args) { Animal a1 = new Animal(); a1.name = "花花";// 對象.屬性直接賦值 a1.setAge(3);// 封裝思想 System.out.println(a1.name + " " + a1.getAge()); Animal a2=new Animal(); System.out.println(a2.name + " " + a2.getAge()); Animal a3=new Animal(); a3=a1; System.out.println(a3.name + " " + a3.getAge()); }}class Animal { String name; private int 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; }}運行結果:花花 3 null 0 花花 3
四、類的構造方法
- 構造方法的方法名必須與類名一樣
- 構造方法沒有傳回型別,也不能定義為void,在方法名前面不聲明方法類型,不能被static、final、synchronized、abstract、native修飾
- 一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的預設構造器,這個構造器不執行任何代碼
- 構造方法不能由編程人員調用,而由系統調用
- 構造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數傳給對象的域
類對象的屬性賦值的先後順序:
- 屬性的預設初始化
- 屬性的顯式初始化
- 通過構造器給屬性初始化
- 通過"對象.方法"的方式給屬性賦值
package com.yyx.pratice;public class Person { private String name; private int age; /* * 無參構造方法,在定義類時沒有定義構造方法, * 則編譯系統會自動插入一個無參數的預設構造器 */ public Person() { super(); } /* * 有參構造方法 */ public Person(String name, int age) { super(); 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; } public static void main(String[] args) { Person person1 = new Person(); person1.setName("張三"); person1.setAge(23); System.out.println(person1.getName() + " " + person1.getAge()); Person person2 = new Person("李四", 21); System.out.println(person2.getName() + " " + person2.getAge()); }}
Java物件導向概述