Java 面嚮對象語言基礎

面向過程 就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
面向對象 是把構成問題事務分解成各個對象,建立對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。
在這裏插入圖片描述

1、 區分類、對象和對象的引用

對象:對象是類的一個實例,有狀態和行爲。例如,一條狗是一個對象,它的狀態有:顏色、名字、品種;行爲有:搖尾巴、叫、吃等。

:類是一個模板,它描述一類對象的行爲和狀態。

創建對象
對象是根據類創建的。在Java中,使用關鍵字new來創建一個新的對象。創建對象需要以下三步:

  • 聲明:聲明一個對象,包括對象名稱和對象類型。
  • 實例化:使用關鍵字new來創建一個對象。
  • 初始化:使用new創建對象時,會調用構造方法初始化對象。
public class Ch_4_1{
	
    public static void main(String[] args) {
        Pet a=new Pet();                  //根據Pet類創建出一個對象
        System.out.println("A Pet object is created.");
        a.name="Snoppy";                 //修改對象的狀態,即對屬性成員賦值
        a.showMe();                       //操控對象的行爲(或調用對象對外提供的服務)
    }
}	  
class Pet{
	String name;            //定義成員變量
	
	void showMe(){          //定義成員方法
		System.out.println("Hi, I'm "+name +" !"); 
	}
}

運行結果

A Pet object is created.
Hi, I'm Snoppy !

【說明】

  • 類中的內容統稱爲成員 ----> 成員變量、成員方法。
  • 只能通過引用名來操控對象,不能通過屬性值。如本例中的a.name、a.showMe(),均爲正確寫法。
  • 一個Java文件可包含多個類,但是隻能存在一個public修飾的類,因爲文件名必須與public類同名。若無public類,則文件取名只要滿足標識符命名規則即可。文件中每個類(或接口),編譯後都會產生一個單獨的.class文件與之對應。
  • 類成員可以缺省,俗稱空類
class Species{}

對象和對象引用的內存管理

1、內存空間的自動管理機制:基於棧的內存管理模式

特色:棧空間的數據被系統自動管理,即在函數調用時自動創建數據空間,在函數運行結束時自動釋放數據空間。棧空間中的數據與特定函數直接相關。程序員在函數中定義的所有變量,無論是基本類型還是引用類型,均存儲在棧空間。
2、內存空間的手動管理機制:基於堆的內存管理模式

特色:在程序中給出申請或釋放內存單元的指令,可實現內存單元的按需分配或釋放。其中堆是一種無結構的內存區域,用於執行期間內存單元的動態分配和釋放。所有對象均存儲於堆空間。

2、 構造函數

關於java類中的構造方法:

  • 構造方法又被稱爲構造函數/構造器/Constructor

  • 構造方法語法結構:
    [修飾符列表] 構造方法名(形式參數列表){
    構造方法體;
    }

  • 普通方法的語法結構:
    [修飾符列表] 返回值類型 方法名 (形式參數列表){
    方法體
    }

  • 對於構造方法來說,“返回值類型不需要指定,並且也不能寫void,
    只要寫上void,那麼這個方法變成普通方法

  • 構造方法的方法名必須和類名保持一致

  • 構造方法的作用?
    -構造方法存在的意義是,通過構造方法的調用,可以創建對象
    -初始化實例變量的內存空間

  • 構造方法應該怎麼調用?
    -普通方法:方法修飾符中有static的時候:類名.方法名(實參列表)、方法修飾符列表中沒有static的時候:引用.方法名(實參列表)
    -new 構造方法名(實參列表)

  • 構造方法調用之後,有返回值嗎?

    每一個構造方法實際上執行結束後都有返回值,但是這個"return值;"這樣的語句不需要寫。構造方法結束的時候java程序自動返回值
    並且返回值類型是構造方法所在類的類型,由於構造方法的返回值類型就是類本身,所以返回值類型不需要編寫
    
  • 當一個類中沒有定義任何構造方法的話,系統默認給該類提供一個無參數的構造方法,這個構造方法被稱爲缺省構造器

  • 當一個類顯示的將構造方法定義出來了,那麼系統不再默認爲這個類提供缺省構造器。建議手動提供

  • 構造方法支持重載機制。在一個類當中編寫多個構造方法,這多個構造方法顯然已經構成方法重載機制

public class ConstructorTest01 {

	public static void main(String[] args) {
		
		User u1 = new User();
		User u2 = new User(10);
		User u3 = new User("zhangsan");
		User u4 = new User(10,"zhangsan");
		
		//有static的方法調用,同一個類中類名可要可不要
		ConstructorTest01.dosome();
		dosome();
		//無static的方法調用,需要先創建對象
		ConstructorTest01 t = new ConstructorTest01();
		t.doOther();
	}
	public static void dosome() {
		System.out.println("do some!");
	}
	public void doOther() {
		System.out.println("do other!");
	}
}

運行結果
帶有int類型參數的構造器
帶有String類型的構造器
帶有int,String類型的構造器
do some!
do some!
do other!

public class User {

	//無參數的構造方法
	public User(){
		System.out.println();
	}
	
	//有參數的構造方法
	public User(int i) {
		System.out.println("帶有int類型參數的構造器");
	}
	
	public User(String name) {
		System.out.println("帶有String類型的構造器");
	}
	public User(int i,String name) {
		System.out.println("帶有int,String類型的構造器");
	}
	
}

運行結果
構造函數 P() 被執行!
構造函數 B() 被執行!
構造函數 C() 被執行!

顯然,若要構造出C的對象,必須先構造出其源自超類B的對象部分。同理,要構造出B的對象,則應先構造出A的對象部分。這說明在構造子類時,會自動調用超類的構造函數,調用次序與派生次序相同。

☁ 空指針引用
所謂空指針引用,就是當引用變量未關聯任何對象時,卻引用其成員。

public class Ch_4_7{
	public static void main(String[] args){
		C c=new C();
		//c.b=new B();c.b.a=new A();
		//System.out.println(c.b.a.x); //此句運行時報錯
		C c1=new C();
	}
}

class A { 
	public int x;
	}
 
class B { 
	public A a; 
	}

class C { 
	public B b; 
	}

☁ 相等判斷
對象相等有兩層含義:
1)兩對象實爲同一對象,即對象的起始地址相同;
2)兩對象不是同一對象,但對象的特定屬性值對應相等。

/*本例表明:A的equals()與String的equals()功能不同;
 *前者作用等同於"==";
 *後者是判斷“字符串字面量的值”是否相同;
 **/

public class Ch_4_8{
	public static void main (String[] args) {
		A a=new A();    A b=new A();
		System.out.println(a==b);              //輸出false。因爲a、b指向不同的對象
		System.out.println(a.equals(b));      //輸出false。因爲a、b指向不同的對象
		String s1=new String("abc");
		String s2=new String("abc");
		System.out.println(s1==s2);          //輸出false。因爲s1、s2指向不同的對象
		System.out.println(s1.equals(s2));  //輸出true。因爲s1和s2存儲的字符串值相同
	} 
}
class A{int x=5;}

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