1. 程式人生 > >面向物件基礎——類與物件的定義

面向物件基礎——類與物件的定義

 面向物件的概念



封裝性:對外部不可見。可以保護程式中的某些內容。

繼承性:擴充套件功能的。

類與物件的關係:



定義類和物件的方法?



類圖的畫法:Person類圖

分為三層:

第一層表示類的名稱,類的名稱與之前一樣要求開頭首字母大寫。

第二層表示屬性的定義,按照" 訪問許可權 屬性名稱:屬性型別 " 的格式定義;

第三層表示類中方法的定義,按照"  訪問許可權 方法名稱():方法返回值型別  " 的格式定義。如下圖所示:


類與物件的進一步研究

掌握Java中的記憶體劃分,java引用傳遞 以及垃圾的產生分析。


重點:物件是儲存在記憶體之中的(指標/引用),屬性是儲存在堆記憶體之中;而方法是儲存在全域性程式碼區之中的,此區中的內容是所有的物件共享的。  注意:在使用物件的時候,物件必須被例項化後才可以使用(並不是單單指的是直接通過new關鍵字進行實現,只要有其堆記憶體的空間指向,則就表示例項化成功)。如果不進行例項化就會出現空指標異常。


此時出現了一個空指向異常。在引用操作中,如果一個物件沒有堆記憶體的引用,而呼叫了類中的屬性或方法,就會出現此問題。所謂的引用資料型別時間上傳遞的是堆記憶體的使用權,可以同時為一個堆記憶體空間定義多個棧記憶體的引用操作。

class Person{
	String name ;		// 宣告姓名屬性
	int age ;			// 宣告年齡屬性
	public void tell(){	// 取得資訊
		System.out.println("姓名:" + name + ",年齡:" + age) ;
	}
};
public class ClassDemo05{
	public static void main(String args[]){
		Person per1 = null ;		// 宣告per1物件
		Person per2 = null ;		// 宣告per2物件
		per1 = new Person() ;		// 只例項化per1一個物件
		per2 = per1 ;				// 把per1的堆記憶體空間使用權給per2
		per1.name = "張三" ;		// 設定per1中的name屬性內容
		per1.age = 30 ;				// 設定per1中的age屬性內容
		// 設定per2物件的內容,實際上就是設定per1物件的內容
		per2.age = 33 ;				// 設定per2中的age屬性內容
		System.out.print("per1物件中的內容 --> ") ;
		per1.tell() ;				// 呼叫類中的方法
		System.out.print("per2物件中的內容 --> ") ;
		per2.tell() ;				// 呼叫類中的方法
	}
};
class Person{
	String name ;		// 宣告姓名屬性
	int age ;			// 宣告年齡屬性
	public void tell(){	// 取得資訊
		System.out.println("姓名:" + name + ",年齡:" + age) ;
	}
};
public class ClassDemo06{
	public static void main(String args[]){
		Person per1 = null ;		// 宣告per1物件
		Person per2 = null ;		// 宣告per2物件
		per1 = new Person() ;		// 例項化per1物件
		per2 = new Person() ;		// 例項化per2物件

		per1.name = "張三" ;		// 設定per1中的name屬性內容
		per1.age = 30 ;				// 設定per1中的age屬性內容
		per2.name = "李四" ;
		per2.age = 33 ;				// 設定per2中的age屬性內容

		per2 = per1 ;				// 把per1的堆記憶體空間使用權給per2
		System.out.print("per1物件中的內容 --> ") ;
		per1.tell() ;				// 呼叫類中的方法
		System.out.print("per2物件中的內容 --> ") ;
		per2.tell() ;				// 呼叫類中的方法
	}
};



以為per2改變了指向,所以其原本指向的記憶體空間沒有任何棧記憶體的引用,則這樣的記憶體就被稱為垃圾,等待垃圾回收機制進行回收。 GC:垃圾回收機制的簡稱。

封裝性:

封裝就是保護內容。 保證某些屬性或方法可以不被外部看見。 封裝的實現:


class Person{
	private String name ;			// 宣告姓名屬性
	private int age ;				// 宣告年齡屬性
	public void setName(String n){	// 設定姓名
		name = n ;
	}
	public void setAge(int a){		// 設定年齡
		if(a>=0&&a<=150){			// 加入驗證
			age = a ;
		}
	}
	public String getName(){		// 取得姓名
		return name ;
	}
	public int getAge(){			// 取得年齡
		return age ;
	}
	public void tell(){
		System.out.println("姓名:" + name + ",年齡:" + age) ;
	}
};
public class EncDemo04{
	public static void main(String arsgh[]){
		Person per = new Person() ;	// 宣告並例項化物件
		per.setName("張三") ;		// 呼叫setter設定姓名
		per.setAge(-30) ;			// 呼叫setter設定年齡
		per.tell() ;				// 輸出資訊
	}
};

Setter方法中加入驗證,getter方法只需要簡單的取回即可。