本文目錄一覽:
- 1、介紹一下java的面向對象
- 2、java的面向對象是什麼意思,能不能用通俗的話解釋一下?
- 3、JAVA中什麼是面向對象
- 4、北大青鳥java培訓:41條面向對象經驗?
- 5、java面向對象如何創建對象?
- 6、java面向對象的特徵有哪些方面
介紹一下java的面向對象
1、面向對象
面向對象(Object Oriented)是一種新興的程序設計方法,或者是一種新的程序設計規範(paradigm),其基本思想是使用對象、類、繼承、封裝、多態等基本概念來進行程序設計。從現實世界中客觀存在的事物(即對象)出發來構造軟體系統,並且在系統構造中儘可能運用人類的自然思維方式。
2、對象
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。
類的實例化可生成對象,一個對象的生命周期包括三個階段:生成、使用、消除。
當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器自動掃描對象的動態內存區,把沒有引用的對象作為垃圾收集起來並釋放。當系統內存用盡或調用System.gc( )要求垃圾回收時,垃圾回收線程與系統同步運行。
3、類
類是具有相同屬性和方法的一組對象的集合,它為屬於該類的所有對象提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名並包括屬性和方法兩個主要部分。
Java中的類實現包括兩個部分:類聲明和類體。
類聲明
其中,修飾符public,abstract,final 說明了類的屬性,className為類名,superclassName為類的父類的名字,interfaceNameList為類所實現的介面列表。
類體
成員變數限定詞的含義:
static: 靜態變數(類變數)
final: 常量;transient: 暫時性變數,用於對象存檔,用於對象的串列化
volatile: 貢獻變數,用於並發線程的共享
方法的實現也包括兩部分內容:方法聲明和方法體。
方法聲明
方法聲明中的限定詞的含義:
static: 類方法,可通過類名直接調用
abstract: 抽象方法,沒有方法體
final: 方法不能被重寫
native: 集成其它語言的代碼
synchronized: 控制多個並發線程的訪問
方法聲明包括方法名、返回類型和外部參數。其中參數的類型可以是簡單數據類型,也可以是複合數據類型(又稱引用數據類型)。
對於簡單數據類型來說,java實現的是值傳遞,方法接收參數的值,但不能改變這些參數的值。如果要改變參數的值,則用引用數據類型,因為引用數據類型傳遞給方法的是數據在內存中的地址,方法中對數據的操作可以改變數據的值。
方法體
方法體是對方法的實現,它包括局部變數的聲明以及所有合法的Java指令。方法體中聲明的局部變數的作用域在該方法內部。若局部變數與類的成員變數同名,則類的成員變數被隱藏。
為了區別參數和類的成員變數,我們必須使用this。this用在一個方法中引用當前對象,它的值是調用該方法的對象。返回值須與返回類型一致,或者完全相同,或是其子類。當返回類型是介面時,返回值必須實現該介面。
構造方法
構造方法是一個特殊的方法。Java 中的每個類都有構造方法,用來初始化該類的一個對象。
構造方法具有和類名相同的名稱,而且不返回任何數據類型。
重載經常用於構造方法。
構造方法只能由new運算符調用
4、面向對象的基本特性
封裝
封裝性就是儘可能的隱藏對象內部細節,對外形成一道邊界,只保留有限的介面和方法與外界進行交互。封裝的原則是使對象以外的部分不能隨意的訪問和操作對象的內部屬性,從而避免了外界對對象內部屬性的破壞。
可以通過對類的成員設置一定的訪問許可權,實現類中成員的信息隱藏。
private:類中限定為private的成員,只能被這個類本身訪問。如果一個類的構造方法聲明為private,則其它類不能生成該類的一個實例。
default:類中不加任何訪問許可權限定的成員屬於預設的(default)訪問狀態,可以被這個類本身和同一個包中的類所訪問。
protected:類中限定為protected的成員,可以被這個類本身、它的子類(包括同一個包中以及不同包中的子類)和同一個包中的所有其他的類訪問。
public:類中限定為public的成員,可以被所有的類訪問。
繼承
子類的對象擁有父類的全部屬性與方法,稱作子類對父類的繼承。
Java中父類可以擁有多個子類,但是子類只能繼承一個父類,稱為單繼承。
繼承實現了代碼的復用。
Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。
子類不能繼承父類中訪問許可權為private的成員變數和方法。
子類可以重寫父類的方法,即命名與父類同名的成員變數。
Java中通過super來實現對父類成員的訪問,super用來引用當前對象的父類。super 的使用有三種情況:
訪問父類被隱藏的成員變數,如:super.variable;
調用父類中被重寫的方法,如:super.Method([paramlist]),super()調用父類構造方法;
調用父類的構造函數,如:super([paramlist]);
多態
對象的多態性是指在父類中定義的屬性或方法被子類繼承之後,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或方法在父類及其各個子類中具有不同的語義。例如:”幾何圖形”的”繪圖”方法,”橢圓”和”多邊形”都是”幾何圖”的子類,其”繪圖”方法功能不同。
Java的多態性體現在兩個方面:由方法重載實現的靜態多態性(編譯時多態)和方法重寫實現的動態多態性(運行時多態)。
編譯時多態:在編譯階段,具體調用哪個被重載的方法,編譯器會根據參數的不同來靜態確定調用相應的方法。
運行時多態:由於子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調用子類的方法。
重載(Overloading)
方法重載是讓類以統一的方式處理不同數據類型的手段。
一個類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法。
返回值類型可以相同也可以不相同,無法以返回型別作為重載函數的區分標準。
重寫(Overriding)
子類對父類的方法進行重新編寫。如果在子類中的方法與其父類有相同的的方法名、返回類型和參數表,我們說該方法被重寫 (Overriding)。
如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
子類函數的訪問修飾許可權不能低於父類的。
java的面向對象是什麼意思,能不能用通俗的話解釋一下?
面向對象的簡單理解就是,你可以把現實中的每一件物品都看作是一個對象,這個物品的信息看作是對象屬性,物品功能看作是對象方法
比如,身份證,這是一個對象,身份證上的姓名,籍貫地址,開卡所,有效期等等信息看作是這個對象的屬性,身份證可以刷卡,那麼刷卡這個動作就是身份證對象的方法/事件
再比如你開的車子,車子本身是對象,車輛類型,購買時間,里程數,手動/自動,耗油數,座位數,等等這些屬於這兩車子的信息都是屬性,前進,轉彎,後退,這些動作都是車輛方法;比如保養,年審,事故,修改里程公里數等等這些東西也是車輛的方法,但也同時是車輛的事件,所以這裡單獨稱為事件方法,事件是方法,方法不一定是事件.不知道說的清楚嗎
JAVA中什麼是面向對象
在java的學習中,面向對象應該是java技術的重中之重,雖然在生活中沒有對象可以面對,但在技術中還是要一直接觸面對對象,而且不可避免。今天對面向對象來了一個小總結。
一、面向對象的特點:
1、將複雜的事情簡單化。
2、面向對象將以前的過程中的執行者,變成了指揮者。
3、面向對象這種思想是符合現在人們思考習慣的一種思想。
過程和對象在我們的程序中是如何體現的呢?過程其實就是函數;對象是將函數等一些內容進行了封裝。
二、匿名對象使用場景:
1、當對方法只進行一次調用的時候,可以使用匿名對象。
2、當對象對成員進行多次調用時,不能使用匿名對象。必須給對象起名字。
三、在類中定義其實都稱之為成員。成員有兩種:
1、成員變數:其實對應的就是事物的屬性。
2、成員函數:其實對應的就是事物的行為。
所以,其實定義類,就是在定義成員變數和成員函數。但是在定義前,必須先要對事物進行屬性和行為的分析,才可以用代碼來體現。
四、類中怎麼沒有定義主函數呢?
注意:主函數的存在,僅為該類是否需要獨立運行,如果不需要,主函數是不用定義的。主函數的解釋:保證所在類的獨立運行,是程序的入口,被jvm調用。
五、成員變數和局部變數的區別:
1、成員變數直接定義在類中;局部變數定義在方法中,參數上,語句中。
2、成員變數在這個類中有效;局部變數只在自己所屬的大括弧內有效,大括弧結束,局部變數失去作用域。
3、成員變數存在於堆內存中,隨著對象的產生而存在,消失而消失;局部變數存在於棧內存中,隨著所屬區域的運行而存在,結束而釋放。
六、構造函數和一般函數有什麼區別呢?
1、兩個函數定義格式不同。
2、構造函數是在對象創建時,就被調用,用於初始化,而且初始化動作只執行一次。
一般函數,是對象創建後,需要調用才執行,可以被調用多次。
七、創建一個對象都在內存中做了什麼事情?
1、先將硬碟上指定位置的Person.class文件載入進內存。
2、執行main方法時,在棧內存中開闢了main方法的空間(壓棧-進棧),然後在main方法的棧區分配了一個變數p。
3、在堆內存中開闢一個實體空間,分配了一個內存首地址值。new
4、在該實體空間中進行屬性的空間分配,並進行了默認初始化。
5、對空間中的屬性進行顯示初始化。
6、進行實體的構造代碼塊初始化。
7、調用該實體對應的構造函數,進行構造函數初始化。
8、將首地址賦值給p ,p變數就引用了該實體。(指向了該對象)
北大青鳥java培訓:41條面向對象經驗?
(1)所有數據都應該隱藏在所在的類的內部。
(2)類的使用者必須依賴類的共有介面,但類不能依賴它的使用者。
(3)盡量減少類的協議中的消息。
(4)實現所有類都理解的最基本公有介面[例如,拷貝操作(深拷貝和淺拷貝)、相等性判斷、正確輸出內容、從ASCII描述解析等等].(5)不要把實現細節(例如放置共用代碼的私有函數)放到類的公有介面中。
如果類的兩個方法有一段公共代碼,那麼就可以創建一個防止這些公共代碼的私有函數。
(6)不要以用戶無法使用或不感興趣的東西擾亂類的公有介面。
(7)類之間應該零耦合,或者只有導出耦合關係。
也即,一個類要麼同另一個類毫無關係,要麼只使用另一個類的公有介面中的操作。
(8)類應該只表示一個關鍵抽象。
包中的所有類對於同一類性質的變化應該是共同封閉的。
一個變化若對一個包影響,則將對包中的所有類產生影響,而對其他的包不造成任何影響.(9)把相關的數據和行為集中放置。
設計者應當留意那些通過get之類操作從別的對象中獲取數據的對象。
這種類型的行為暗示著這條經驗原則被違反了。
(10)把不相關的信息放在另一個類中(也即:互不溝通的行為)。
朝著穩定的方向進行依賴。
(11)確保你為之建模的抽象概念是類,而不只是對象扮演的角色。
類應當統一地共享工作。
(13)在你的系統中不要創建全能類/對象。
對名字包含Driver、Manager、System、Susystem的類要特別多加小心。
規劃一個介面而不是實現一個介面。
(14)對公共介面中定義了大量訪問方法的類多加小心。
大量訪問方法意味著相關數據和行為沒有集中存放。
(15)對包含太多互不溝通的行為的類多加小心。
這個問題的另一表現是在你的應用程序中的類的公有介面中創建了很多的get和set函數。
(16)在由同用戶界面交互的Java面向對象模型構成的應用程序中,模型不應該依賴於界面,界面則應當依賴於模型。
(17)儘可能地按照現實世界建模(我們常常為了遵守系統功能分布原則、避免全能類原則以及集中放置相關數據和行為的原則而違背這條原則).(18)從你的設計中去除不需要的類。
一般來說,我們會把這個類降級成一個屬性。
(19)去除系統外的類。
系統外的類的特點是,抽象地看它們只往系統領域發送消息但並不接受系統領域內其他類發出的消息。
(20)不要把操作變成類。
質疑任何名字是動詞或者派生自動詞的類,特別是只有一個有意義行為的類。
考慮一下那個有意義的行為是否應當遷移到已經存在或者尚未發現的某個類中。
(21)我們在創建應用程序的分析模型時常常引入代理類。
在設計階段,我們常會發現很多代理沒有用的,應當去除。
(22)盡量減少類的協作者的數量。
一個類用到的其他類的數目應當盡量少。
(23)盡量減少類和協作者之間傳遞的消息的數量。
(24)盡量減少類和協作者之間的協作量,也即:減少類和協作者之間傳遞的不同消息的數量。
(25)盡量減少類的扇出,也即:減少類定義的消息數和發送的消息數的乘積。
(26)如果類包含另一個類的對象,那麼包含類應當給被包含的對象發送消息。
也即:包含關係總是意味著使用關係。
(27)類中定義的大多數方法都應當在大多數時間裡使用大多數數據成員。
(28)類包含的對象數目不應當超過開發者短期記憶的容量。
這個數目常常是6.當類包含多於6個數據成員時,可以把邏輯相關的數據成員劃分為一組,然後用一個新的包含類去包含這一組成員。
(29)讓系統功能在窄而深的繼承體系中垂直分布。
(30)在實現語義約束時,最好根據類定義來實現。
這常常會導致類泛濫成災,在這種情況下,約束應當在類的行為中實現,通常是在構造函數中實現,但不是必須如此。
(31)在類的構造函數中實現語義約束時,把約束測試放在構造函數領域所允許的盡量深的包含層次中。
(32)Java面向對象中,約束所依賴的語義信息如果經常改變,那麼最好放在一個集中式的第3方對象中。
(33)約束所依賴的語義信息如果很少改變,那麼最好分布在約束所涉及的各個類中。
(34)類必須知道它包含什麼,但是不能知道誰包含它。
(35)共享字面範圍(也就是被同一個類所包含)的對象相互之間不應當有使用關係。
(36)繼承只應被用來為特化層次結構建模。
(37)派生類必須知道基類,基類不應該知道關於它們的派生類的任何信息。
(38)基類中的所有數據都應當是私有的,不要使用保護數據。
電腦培訓認為類的設計者永遠都不應該把類的使用者不需要的東西放在公有介面中。
(39)在理論上,繼承層次體系應當深一點,越深越好。
(40)在實踐中,繼承層次體系的深度不應當超出一個普通人的短期記憶能力。
一個廣為接受的深度值是6.(41)所有的抽象類都應當是基類。
java面向對象如何創建對象?
java作為互聯網編程中使用範圍最廣泛的編程語言之一,我們有許多的知識是需要掌握學習的,今天java課程培訓機構就給大家分析講解一下java面向對象的編程方法有哪些。
常用的創建對象的模式有以下幾種:
一.工廠模式
工廠模式抽象了具體對象的過程,用函數來封裝以特ing介面創建對象的細節。
如下:
functioncreateAnimal(name,age){
varo=newObject();
o.name=name;
o.age=age;
o.sayName=function(){
alert(this.name);
}
returno;
}
varcat=createAnimal(“cat”,12);
vardog=createAnimal(“dog”,3);
工廠模式雖然解決了創建多個相似兌現過的問題,但是卻沒有解決對象識別的問題。
二.構造函數模式
構造函數模式可以創建特定類型的對象。
functionAnimal(name,age){
this.name=name;
this.age=age;
this.sayName=function(){
alert(this.name);
}
}
varcat=newAnimal(“cat”,12);
vardog=newAnimal(“dog”,3);
可以使用對象的constructor屬性或instanceof操作符來標識對象類型。
cat.constructor==Animal//true
catinstanceofAnimal//true
三.原型模式
每個函數都有一個prototype(原型)屬性。這個屬性是一個指針,指向一個對象,而這個對象的用途是包含可以由特定類型的所有實例共享的屬性和方法。
使用原型對象的好處是,可以讓所有對象實例共享它所包含的屬性和方法。
functionAnimal(){}
Animal.prototype.name=”animal”;
Animal.prototype.age=1;
Animal.prototype.sayName=function(){
alert(this.name);
}
vartest1=newAnimal();
test1.sayName();//”animal”
vartest2=newAnimal();
test2.sayName();//”animal”
alert(test1.sayName===test2.sayName);//true
或者:
functionAnimal(){}
Animal.prototype={
constructor:Animal,
name:”animal”,
age:1,
sayName:function(){
alert(this.name);
}
};
原型中所有屬性是被很多實例共享的,通過在實例上添加一個同名屬性,可以隱藏原型中的對應屬性。但是,對於包含引用類型值的屬性來說,問題就比較明顯了。
java面向對象的特徵有哪些方面
眾所周知,Java是一種面向對象性的語言。而面向對象,Obeject Oriented,是一種編程術語。面向對象是當今軟體開發方法的主流方法之一,他是把數據以及對數據的操作放在一起,作為一個相互依存的整體,就是我們所說的對象。那麼Java面向對象的特徵又是什麼?下面就一起來看看Java面向對象的四大特徵:
特徵一:抽象
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象不打算了解全部問題,而是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面:過程抽象;數據抽象。
特徵二:繼承
繼承是一種連接類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變數,並且派生類可以修改或者增加新的方法使之更適合特殊的需要。
特徵三:封裝
封裝是指將客觀事物抽象成類,每個類對自身的數據和方法實行保護。類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
特徵四:多態
多態是指允許不同類的對象對同一消息做出響應。多態包括參數化多態和包含多態。多態性語言具有靈活、抽象、行為共享、代碼共享等優勢,很好地解決了應用程序函數同名問題。Java中實現多態主要是方法的重載和方法的覆蓋。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/250731.html