1. 程式人生 > >java面向物件 基礎

java面向物件 基礎

目錄

二、類與物件

三、成員變數和區域性變數的區別

四、匿名物件(為了簡化書寫)

五、封裝

六、構造方法

七、this關鍵字

 

4、自定義類

一、程式碼塊static

1.定義

2、分類及詳述

二、static

1.概念

2.特點

3.注意事項

4.靜態變數(static修飾的成員變數)和非靜態變數的區別

5.記憶體圖

6.什麼時候用

 


1.Java語言屬於面向物件程式語言
面向物件解決問題的思路:
從現實世界中客觀存在的事物出發來構造軟體系統,並在系統構造中儘可能運用人
類的自然思維方式,強調直接以問題域中的事物為中心來思考問題,認識問題,並
根據這些事物的本質特點,把它們抽象地表示為系統中的物件,作為系統的基本構
成單位

 

2.面向物件程式設計包括
面向物件的分析(OOA,Object Oriented Analysis)
面向物件的設計(OOD,Object Oriented Design)
面向物件的程式設計實現(OOP,Object Oriented Programming)
面向物件思想說明
OOA:通常是把構成問題域的事務分解成各個物件,給物件賦予相應的屬性
和行為,通過多個物件的相互協調

OOD:這些物件沒有先後順序,共同作用才構成了整個系統。我們只要用代
碼設計出這幾個型別的物件,然後讓他們互相通訊、傳遞訊息就可以完成
系統功能

OOP:編寫程式碼

分析系統中涉及的事務,根據“物件”抽象出“類”;
找出物件共有的特點,並且在類中定義為屬性;
找出物件共有的行為,並且定義為類的方法。
 

3.面向物件概念
抽象(abstract):
從事物中捨棄個別的非本質特徵,抽取共同的本質特徵
只考慮與問題域相關的資訊,而忽略與問題域不相關的部分
物件(object):是系統中用來描述客觀事物的一個實體。
可以是有形的,也可以是無形的(如一個客戶,一張銀行卡,窗體中的一個按鈕等等)
物件是構成世界的一個獨立單位
具有自己的靜態結構(屬性)和動態行為(方法)

一、面向物件思想

1、面向物件與面向過程區別和聯絡。

A:區別:

**面向過程關注執行過程,這個時候我們是執行者。

**面向物件關注的是最終功能,這個時候我們是指揮者。

B:聯絡:.

**面向物件是基於面向過程的。

2、面向物件

A:面向物件思想的特點。

**是符合人們思考習慣的一種思想。

***程式設計思想就是來源於生活。

**將複雜的問題簡單化了。

**把我們從執行者變成了指揮者。

3、面向物件思考問題的方式

找物件,完成功能。

如果物件不存在,自己就造一個物件。

4、面向物件的三大特性

A:封裝

B:繼承

C:多型

此外面向物件還有個一個特性------->抽象!

二、類與物件

1、類

是對現實世界事務的抽象。

A:類就是一類事物的抽象。

B:什麼是類
 把相似的物件劃歸成一個類。
 在軟體設計中,類,就是一個模板,它定義了通用於一個特定種
類的所有物件的屬性(變數)和行為(方法)

2、物件

是該類事物具體的存在個體。

3、描述一個類

A:現實生活中我們用屬性和行為來描述一個事物。

B:這個時候我們就可以用屬性和行為來描述一個類

那麼,他們在類中分別對應什麼呢?

**屬性 -- 成員變數 (屬性)--------------->整個類中有效

**行為 -- 成員方法 (函式,功能)------>整個類中有效

4、自定義類的分析過程

A:分析:

**首先分析這個類是個什麼樣的事物

**其次你就應該該事物具有哪些屬性和行為

**把這個事物的屬性和行為對應成我們類的成員變數和成員方法。

B:自定義一個電腦類

**屬性 顏色,品牌,重量

**行為 開機,關機,上網

   對應成類

//自定義電腦類

class Computer

{

String color;//顏色

String type;//品牌

double weight;//重量

public void start(){}//開機

public void stop(){}//關機

public void online(){}//上網

}

5、物件的建立和使用及物件的記憶體圖

A:物件的建立

Student s = new Student();//建立一個Student的物件,並把它賦給了Student型別的s。

B:使用物件

如果你想使用類中的方法和屬性,你必須通過類的例項(物件)來呼叫。

呼叫方式:

物件名.屬性;

物件名.方法名(引數列表);

 

 

三、成員變數和區域性變數的區別

1、作用範圍

成員變數作用於整個類。

區域性變數只作用於它所屬的範圍(函式,語句);

2、生命週期&位置

成員變數儲存在堆記憶體中,是屬於物件的,隨著物件的存在而存在,隨著物件的消失而消失。

區域性變數儲存在棧記憶體中,是屬性它所屬範圍的,使用完立即被釋放。

3、初始值

成員變數都有預設初始化值。

**整型 0

**浮點型 0.0

**字元型 '\u0000' 空字元

**布林型 false

**字串 null

區域性變數沒有預設值,要想使用,必須遵循:

先定義(宣告),再賦值,最後使用。

四、匿名物件(為了簡化書寫)

1、概念

沒有名字的物件。是物件的一種簡寫形式。

2、什麼時候用

A:該物件只執行一次方法的呼叫。多次呼叫必須起名字!

**new Car().start();

B:可以作為實際引數傳遞

**public static void method(Car c){}

**method(new Car());

五、封裝

1、概念

把實現細節隱藏,提供公共的訪問方法。

任何物件或者系統都應該有一個明確的邊界,邊界內部的改變對外部沒有影響,在java中,類包含了資料和方法,將資料放到一個類中就構成了封裝。他將變化的進行了隔離,這樣大大的提高了程式的安全性,由於他提供了公共訪問方式,我們只需要呼叫它的功能即可,這樣就提高了程式碼的複用性(只關注功能不用在意具體實現),自然而然就方便使用了。我們只需要將類中的成員變數私有(在變數名前加private即可),並提供相對應的set和get方法。 機箱和主機板的例子。

私有隻是封裝的一種體現,隱藏才算是封裝。

2、好處

A:將變化隔離。

B:便於使用。

C:提高重用性。

D:提高安全性。

3、private關鍵字

A:private

**私有的

B:特點

**是一個許可權修飾符。

**可以修飾成員,被修飾的成員只能在本類中訪問

C:一般用法

**一般用於將成員變數私有,提供公共的get,set方法進行訪問。

自定義類 一般格式:

class Student{

private String name;

public void setName(String n){

name = n;

}

public String getName(){

return name;

}

}

注意:set方法可用於對成員變數進行賦值。

六、構造方法

1、用途

建立物件,並進行初始化動作。

2、特點

A:構造方法名和類名相同

B:沒有返回型別

C:沒有返回值

執行特點:物件建立時被呼叫。

3、構造方法與成員方法的區別

A:格式區別

構造方法要求:方法名與類名相同,沒有返回型別。

成員方法要求:記住函式的定義格式。

B:用途

構造方法用於建立物件,並初始化值。

成員方法用於完成一個功能。

C:什麼時候被呼叫

構造方法一new就被呼叫。

成員方法時通過物件名來呼叫。

 

你想建立物件必須使用構造方法。

你想使用功能必須通過物件名來呼叫。

 

你想使用一個功能:首先建立物件,然後使用物件的功能。

4、構造過載

A:構造方法名相同,引數不同。

B:構造方法的注意事項

**自定義類中如果沒有構造方法,系統會預設給出一個無參構造方法。

    **如果你給定了構造方法,系統將不再提供無參構造方法了。

  ***如果給定的有無參構造方法,你可以繼續使用無參構造方法來建立物件。

  ***如果沒有無參構造方法,你可以不使用。否則,就會報錯。

**建議:每次我們都手動給出無參構造方法。

注意:帶參構造方法也可以對成員變數進行賦值。

 

七、this關鍵字

1、概念

代表本類物件的一個引用

A:方法被哪個物件呼叫,該方法內的this就代表哪個物件。

2、使用場景

A:區域性變數隱藏成員變數

class Student{

private String name;

/*

public void setName(String n){

name = n;

}

*/

public void setName(String name){

this.name = name;

}

public String getName(){

return name;

}

}

 呼叫:

Student s = new Student();

s.setName("張三");

String str = s.getName();

System.out.println(str);

System.out.println(s.getName());

B:構造方法中使用this

class Student{

private String name;

private int age;

Student(){}

Student(String name){

this.name = name;

}

Student(int age){

this.age = age;

}

Student(String name,int age){

//this(name);//代表就是呼叫構造方法----構造方法中的呼叫方式

this.name = name;

this.age = age;

}

}

C:比較年齡

public boolean compare(Person p){

return this.age==p.age;

//return this.getAge()==p.getAge();//是可以的。

}

 

4、自定義類

在自定義類的時候:

1:給屬性賦值有幾種方式

定義的時候給屬性。

A:set賦值 開發都用set。

B:構造方法

2:提供一個無參構造

//自定義一個學生類

class Student{

private int age;//姓名

private String name;//年齡

Student(){}

public void setAge(int age){

this.age = age;

}

public int getAge(){

return age; //return this.age;

}

public void setName(String name){

this.name = name;

}

public void getName(){

return name;

}

}

 

一、程式碼塊

1.定義

它是由一對{}括起來的程式碼。

2、分類及詳述

A:區域性程式碼塊用在區域性,可以及時釋放記憶體,提到效率。

B:構造程式碼塊每個構造方法執行時都會自動呼叫構造程式碼塊。可以對所有物件初始化。

C:靜態程式碼塊隨著類的載入而執行,而且只執行一次,優先與主方法。

假如我們有一個Person物件。請問Person p = new Person();在記憶體中到底做了什麼呢?

步驟

A:把Preson.class檔案載入進記憶體。

B:在棧記憶體空間開闢一個小空間,儲存p變數。

C:在堆記憶體中開闢空間。建立物件。

D:對物件中的成員變數進行預設初始化。

E:執行構造程式碼塊,如果沒有構造程式碼塊,就不執行。

F:對物件中的成員變數進行賦值。

G:把物件構造初始化完畢。

H:將物件在堆記憶體的首地址賦給棧記憶體變數p。

 

二、static

1.概念

靜態的意思,用於修飾成員。

2.特點

隨著類的載入而載入

優先於物件存在

被所有物件所共享

可以直接被類名呼叫

3.注意事項

A:靜態成員只能訪問靜態成員。

B:靜態方法中不能有this,super關鍵字。

C:主函式是靜態的        單講。

4.靜態變數(static修飾的成員變數)和非靜態變數的區別

A:靜態變數隨著類的載入而載入,隨著類的消失而消失。生命週期最長。

   非靜態變數隨著物件的建立而存在,隨著物件的消失而消失。

B:靜態變數和類相關,是所屬於類的,可以直接被類名呼叫,也可以被物件名呼叫。也稱為類變數。

非靜態變數和物件相關,是所屬於物件的,只能被物件名呼叫。稱為例項(物件)變數。

C:靜態變數儲存於方法區中的靜態區。

   非靜態變數儲存於物件的區域,在堆記憶體中。

D:靜態變數的資料被所有的物件共享。

   非靜態變數是每個物件特有的資料。

5.記憶體圖

 

6.什麼時候用

分析問題時:

當這個內容是所有物件所共享的時候,我們就把它定義為static修飾的。

當這個內容是每個物件所特有的時候,就把它定義為非static修飾的。

寫程式碼的時候,你可以考慮:

某個成員方法訪問了物件所共享的內容。或者說,訪問了靜態成員。那麼,該方法 就必須定義為static修飾的。訪問了特有的屬性,就不能被靜態修飾。

簡單說:如果函式中訪問了成員變數,不能靜態,否則可以靜態化,直接被類名呼叫即可。