天天看點

Java語言基礎-面向對象-封裝-構造方法-成員變量,局部變量面向對象

面向對象

什麼是面向過程?:

面向過程的設計:

最小的程式單元是函數,每個函數負責完成某一個功能,用以接受輸入資料,函數對輸入資料進行處理,然後輸出結果資料.

整個軟體系統由一個個的函數組成,其中作為程式入口的函數稱之為主函數,主函數依次調用其他函數,普通函數之間可以互相調用,進而實作整個系統功能.

面向過程的設計,是采用指定而下的設計方式,在設計階段就需要考慮每一個子產品應該分解成哪些子子產品,每一個子子產品有細分為更小的子子產品,如此類推,直到将子產品細化為一個個函數.

存在的問題:

1.設計不夠直覺,與人類的習慣思維不一緻.

2.系統軟體适應性差,可拓展性差,維護性低.

面向過程最大的問題在于随着系統的膨脹,面向過程将無法應付,最終導緻系統的崩潰。為了解決這一種軟體危機,我們提出面向對象思想。

引出面向對象:

“面向對象”(英語:Object Oriented,簡稱OO)是一種以事物為中心的程式設計思想。

面向對象程式設計(英語:Object-oriented programming,縮寫:OOP),是一種程式開發的方法。它将對象作為程式的基本單元,将程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性。

面向對象時相對于面向過程而已的(c則是一個典型的面向過程的語言),站在面向對象的角度去看問題,你則是對象的動作的指揮者。如果站在面向過程的角度去看問題,你則是動作的執行者。

強調的是功能行為,面向過程”是一種以過程為中心的程式設計思想。“面向過程”他們不支援豐富的“面向對象”特性(比如繼承、多态),就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實作,使用的時候一個一個依次調用就可以了。面向過程在這一系列工作的執行中,強調的是工作的執行。

面向對象:一種基于面向過程的新的程式設計思想,顧名思義該思想是站在對象的角度思考問題,我們把多個功能合理的放到不同對象裡,強調的是具備某些功能的對象。

具備某種功能的實體,稱為對象

面向對象的三大特征:

封裝(encapsulation)

繼承(inheritance)

多态(polymorphism)

抽象

開發的過程:其實就是不斷的建立對象,使用對象,指揮對象做事情。

設計的過程:其實就是在管理和維護對象之間的關系.

例如:

吃飯

1:面向過程
  		1:自己動手做
  		2:買菜
  		3:洗菜
  		4:煮飯炒菜
  		5:很難吃,浪費時間
  	2:面向對象
  		1:找專業對象
  		2:餐館.點餐
  		3:餐館,做飯
  		4:飯好吃,節約時間,精力
           

局部變量和成員變量

成員變量:定義在類中的變量

局部變量 定義在方法中的變量

定義變量的文法:

資料類型 變量名 = 值;

變量的範圍 :

成員變量:成員變量在整個類中都有效

局部變量:隻在其中聲明的方法内有效
           

變量的初始值 :

成員變量: 它存儲在堆中,如果沒有賦初值

它有預設值:整數byte、short、int、long =0;

char=’\uoooo’ (表示空)

boolean =flase;

局部變量: 沒有初始值,是以必須先手動初始化才能使用.

變量的生命周期:

成員變量: 它屬于對象,它随着對象的建立而建立,随着對象的消失而消失

局部變量: 使用完馬上釋放空間。

什麼時候使用成員變量和局部變量?

1:考慮變量的生存時間,這會影響記憶體開銷。

2:擴大變量作用域,不利于提高程式的高内聚。

開發中應該盡量縮小變量的作用範圍,如此在記憶體中停留時間越短,性能也就更高。

不要動不動就使用static修飾,一般,定義工具方法的時候,static方法需要通路的變量,該變量屬于類,此時才使用static修飾字段.

也不要動不動就使用成員變量,因為存在着線程不安全問題,能使用局部變量盡量使用局部變量.

什麼是封裝?

1.把對象的狀态和行為看成一個統一的整體,将二者存放在一個獨立的子產品中(類);

2.“資訊隐藏”, 把不需要讓外界知道的資訊隐藏起來,盡可能隐藏對象功能實作細

節,向外暴露方法,保證外界安全通路功能; 使用private私有化,不準外界通路,把方法使用public修飾,允許外界通路.

封裝的好處

1:隐藏了類的具體實作,防止調用者随意修改系統屬性

2:提高元件的重用性.

3:提高對象資料的安全性

通路權限控制修飾符:

private: 表示私有的, 表示類通路權限. 隻能在本類中通路,離開本類之後,就不能直接通路.

不寫(預設):表示包私有,表示包通路權限. 通路者的包必須和目前定義類的包相同才能通路.

protected:表示子類通路權限,同包中的可以通路,即使不同包,但是有繼承關系,也可以通路.

public:表示全局的,可以公共通路權限,如某個字段/方法,使用了public修飾,則可以在目前項目中任何地方通路.

protected:一般,在繼承關系中,父類需要把一個方法隻暴露給子類.

class PersonDemo
{
	public static void main(String[] args) 
	{
		Person p1 = new Person();
		p1.setAge(10);
		p1.name = "abc";
		System.out.println(p1.name);
		System.out.println(p1.getAge());//擷取年齡
	}
}
class Person
{
	String name;
	private int age;  //私有化
	public void setAge(int a)  
	{
		if (a<0)
		{
			System.out.println("年齡不能為負數");
			return;
		}	
		age = a ;
	}
	public int getAge() //擷取年齡的方法
	{
		return age;
	}
}
           

構造方法

構造方法的作用:

1):建立對象,凡是必須和 new 一起使用.
       2):完成對象的初始化操作.
           

構造方法的特點:

1):構造方法的名稱和目前所在類的名稱相同.
      2):禁止定義傳回類型,
      3):在構造方法中,不需要使用return語句.其實構造方法是有傳回值的,傳回的是目前建立對象的引用.
           

構造方法注意的細節

1.當類中沒有定義構造函數時,系統會指定給該類加上一個空參數的構造函數。這個是類中預設的構造函數。當類中如果自定義了構造函數,這時預設的構造函數就沒有了。

2.在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在于類中,是以重載的形式展現的。因為構造函數的名稱都相同。

public class  PersonDemo
{
	public static void main(String[] args) 
	{
		Person p = new Person("person"); 
		System.out.println(p.name);
	}
}
class Person  //建立人類
{
	String name = null;//人的名稱
//自定義構造器
   	Person(){}//無參數的構造器
	Person(String n)//有參數的構造器
	{
		name = n;  //把n的值賦給name字段
	}
}