一、物件導向和面向過程的區別
面向過程:它所考慮的是過程和步驟,比如說開車去深圳我們要考慮的是怎麼去也就是說:what to do
物件導向:它所考慮的是有幾個對象,比如開車去深圳我們要考慮的就是有幾個對象,也就是說:how to do
二、類
概念:是對象的模板,它是具有相同屬性和行為(方法)的一組對象的集合
對象和類的區別:類是抽象的,而對象是具體存在的
知識擴充:同一個檔案夾中只能有一個類是public的,而且main()方法絕對是包含在public類當中
三、構造方法(構造器、建構函式)
作用:1、主要是用來建立對象 2、初始化成員變數
特點:1、必須與類名相同 2、沒有傳回值類型,void也沒有 3、每一個類都會有一個隱式的構造方法,沒有參數和方法體 4、手動添加顯式的構造方法那麼隱式的構造方法自動消失
知識擴充:物件導向編程思維步驟:1、考慮有幾個對象 2、通過對象確定有幾個類 3、找出每一個類中存在的方法 4、調用相應的方法實現功能
例如這個簡單的例子:public class test{
public static void main(String[] args){
Mouse mouse = new Mouse();
mouse.name = "mick";
Cat cat = new Cat();
cat.name = "Tom";
cat.Catch(mouse);
}
}
class Cat{
String name;
public void Catch(Mouse mouse){
mouse.cry();
}
}
class Mouse{
String name;
public void cry(){
System.out.println(name + " is crying");
}
}
思維方式:找出有兩個對象tom貓和mick老鼠。進而找出有兩個類一個是貓類一個是老鼠類,然後確定兩個對象內部分別包含兩個方法一個是屬於tom對象的catch()方法一個是屬於mick 對象的cry()方法
專家模式:一個方法改變的是那個對象的狀態(屬性),那麼該方法就屬於誰
四、JVM(JAVA虛擬機器)的四個地區
1、代碼區(code segment):存放的是位元組碼
2、堆區(heap segment):存放的是對象
3、棧區(Stack segment):存放的是局部變數
4、棧區的一塊特殊地區(static segment):存放字串常量和靜態變數
堆和棧的區別:堆可以儲存大的資料類型運行速度慢;棧只可以儲存小的資料內容但是運行速度快
局部變數和成員變數重名的問題解決辦法
辦法:該情況下使用this指標,因為每一個對象都有一個this指標,相當於當前對象的引用。原理如所示:
圖 1
五、成員變數初始化
1、JAVA當中,成員變數會預設初始化
數實值型別:預設為0 布爾類型(boolean):預設為false 字元類型(char):預設是空 引用資料類型:預設是NULL
null值的含義:表示一個引用沒有指向任何一個對象,也就是誰棧中的一個引用沒有指向任何一個棧中的記憶體位址,如所示形象來說就是“引用”的那個箭頭沒有
2、JAVA中的記憶體回收機制(GC)
如果一個對象沒有指向任何一個引用,那麼這個對象就是JAVA中的垃圾,JAVA會自動調用GC自動收回
知識延伸:如果說在JAVA中需要一個對象使用完後就被GC收回,最好的變法就是把指向這個對象的引用設定為NULL
六、Static關鍵字
1、加上static的成員變數稱之為靜態變數(類變數)
static segment中的資料不能重複,所有對象共用其資料,其中一個對象對其進行修改之後那麼其他的對象的值也隨之改變
因為所有對象共用它,跟對象沒有任何關係,所以也就稱之為類變數;可以使用 類名.變數名 來調用
如所示邏輯:
圖 2
堆裡面的兩個對象共用 Static segment裡面的靜態變數Corcol;如果要改變其值只需使用 Person.Corcol 即可改變其值
2、加上static的方法稱之為靜態方法(類方法)
類方法不需要建立對象來調用,可以直接是用 類名.方法名 調用
注意:(1)、靜態方法只能訪問靜態成員變數
(2)、非靜態方法既可以訪問靜態成員變數也可以訪問非靜態成員變數
知識延伸:為什麼main()方法是static的?
因為main()方法是程式的入口,在使用main()方法之前不允許有任何的對象被調用,所以說main()方法務必是static的
以上知識均為本人學習總結所得、如有錯誤請加以批評指正