【轉載】J2SE知識點歸納筆記(三)---Java面向對象 part 1

注:本文轉載自coder-pig   

原文鏈接:http://blog.csdn.net/coder_pig/article/details/22262055


文章看了看,寫得不錯,單看最後實例代碼的註釋就知道了,不加註釋的代碼不是好代碼哦。馬上五一放假了,有點激動哦~~~~~~~~~但是假期不要太懶惰哦,加油加油~偷笑





Java面向對象


ps:因爲面向對象的內容比較重要,而且很多要通過代碼理解的;

如果全部寫在一篇文章中會顯得篇幅過長,過於累贅;讀者讀得累;

我也寫得累!



前言


在上一節中我們對Java的基礎知識進行了學習;

在這一節中我們將會進一步瞭解Java的核心

面向對象部分!這一節很重要,也是後面幾節的基礎,

希望大家可以認真學習下!

EveryThing is Object!




面向對象的理解:


對象的引入:


所有事物都具有兩個方面:有什麼?能幹什麼

對應的,我們可以理解爲

屬性:描述對象;

方法:對象有什麼功能


對象設計的要求:

高內聚,低耦合,從而提高對象的可複用性

注:這裏解釋下高內聚低耦合,這句話字面上不好理解。

 耦合性也稱塊間聯繫:指軟件系統結構中各模塊間相互聯繫緊密程度的一種度量。模塊之間聯繫越緊密,其耦合性就越強,模塊的獨立性則越差。模塊間耦合高低取決於模塊間接口的複雜性、調用的方式及傳遞的信息。

 內聚性又稱塊內聯繫:指模塊的功能強度的度量,即一個模塊內部各個元素彼此結合的緊密程度的度量。若一個模塊內各元素(語名之間、程序段之間)聯繫的越緊密,則它的內聚性就越高。

 例子:一個程序有50個函數,這個程序執行得非常好;然而一旦你修改其中一個函數,其他49個函數都需要做修改,這就是高耦合的後果。
一旦你理解了它,你編寫概要設計的時候設計類或者模塊自然會考慮到“高內聚,低耦合”。


對象設計的思想:

以對象爲中心,先開發類,得到對象,再通過對象間的相互通信實現功能




對象


如何創建對象:


new關鍵字 + 指定類名創建

eg:Person p = new Person();


對象的產生:


現在堆內存中創建一個對象----->然後在棧內存中創建一個變量引用對象的地址



對象與對象的引用:


對象名作爲操作的標識符,僅僅只是對象的一個引用而已,而並非對象本身;

有引用,但不表示一定要有一個對象與引用相連;

所以在創建一個引用時,都需要進行初始化


對象的使用:

通過點語法訪問.eg:p.age = 18;


對象的生命週期:

從new創建開始,到沒有任何引用到達對象時結束(成爲垃圾)


匿名對象的使用:

不定義變量引用對象,用new創建後直接調用,沒名字,所以叫做匿名對象

通常我們需要使用一對象,且只用一次的話,就用匿名對象(沒有引用,使用一次後就變成垃圾了)

可以作爲實參進行傳遞

注:這裏給大家舉一個匿名類的例子。

有一個方法:mMethod(Person p),該方法的參數是一個對象,你用這個方法的時候有兩種方式傳參。


方法一:Person p=new Person();

mMethod(p);

方法二:mMethod(new Person());         用一個沒有名字的對象作爲參數。




類:


類與對象的建模過程:



類的定義:


類的一般形式:

class 類名

{

        成員變量

構造方法

成員方法

}


成員變量與局部變量的區別:


成員變量:定義在類中,在整個類中都可以訪問,存在於棧內存的對象中,隨着對象的消失而消失,有默認初始值

局部變量:定義在方法,語句,局部代碼塊中,只在所屬區域有效;存在棧內存的方法中,隨所屬區域的執行而執行;結束而

         釋放,沒有默認初始值


成員變量的初始化:

當對象創建時,會對成員變量自動賦初值,基本數據位0,引用型爲null;

注:char爲"\u0000"表空     boolean:false



構造方法(Constructor)


介紹:

爲對象進行初始化的一個特殊方法,在生成對象時會被調用來初始化對象

構造方法名需與類名相同,new對象時隱式地進行調用,用戶無法顯式調用;

無返回值,不能加void返回值類型,總會有的,就算你不寫構造方法;

也會自動生成默認缺省的構造方法;當然如果我們寫了,就不會再生成了


構造方法的重載(overLoading):


又叫編譯時的多態,需要參數類型

方法名相同,參數不同(個數,類型)



this關鍵字:


1)用於區分局部變量與實例變量

2)顯式地調用重載的構造方法,貌似用的不怎麼多,就是構造方法的相互調用

調用語句需要寫在第一行哦!

eg:

  1. /* 
  2.  * 該程序演示的是構造方法的重載和this關鍵字的作用 
  3.  * */  
  4.   
  5. public class Test {  
  6.       
  7.     private int i;  
  8.     private String str;  
  9.       
  10.     //這個構造方法是完成變量初始化的方法,this在這裏區分局部變量與成員變量哦!  
  11.     public Test(int i,String str) {  
  12.         this.i = i;  
  13.         this.str = str;  
  14.     }  
  15.       
  16.     //通過this調用上面的構造方法,要放在第一行  
  17.     public Test(String str)  
  18.     {  
  19.         this(1,"woqu");  
  20.     }  
  21.       
  22.     //通過this調用上面的構造方法,要放在第一行  
  23.     public Test()  
  24.     {  
  25.         this("HeHe");  
  26.     }  
  27.       
  28. }  




成員方法:

一個好的方法應該有好的移植性和可重用性

兩種傳參方式:

①按值傳遞:內存的空間變量  eg:int i

②按引用傳遞(傳對象引用):Integer類的一個對象引用: Integer i = new Integer(10);



public修飾類的規則:

一個Java文件,只允許有一個修飾爲public的類或者接口,且名字要與文件名相同,不然編譯器會報錯


包的概念:

打包:package      eg:   package com.jay.example;

導包:import     eg:inport java.io.*;

注意:導包時用星號只表示該層次的所有類,但是不包含子層次下的類!!!!



作用域修飾符:

默認(default):同包可見                                    public共有:所有類可訪問

private私有:同一類可見      protected保護:子類或同包可見

ps:要注意private和protected都不能夠修飾類啊!!!!



數據成員與方法成員在內存中的組織:

數據成員佔據不同的內存區域;所有方法成員共享一段程序代碼



知識點使用實例:

步驟:

定義一個Person類,然後再建立一個測試類PersonTest,對相關方法進行調用

代碼如下:

Person.java


  1. //將該類打包到一個文件夾中  
  2. package com.jay.example;  
  3.   
  4. public class Person {  
  5.       
  6.     /* 
  7.      * 定義成員變量,和成員變量不同,當我們new對象時 
  8.      * 系統會給他們生成默認的初始值,這裏之所以將所有變量都 
  9.      * 設置成private私有,是爲了實現封裝,外界如果想訪問 
  10.      * 修改屬性的話,需要通過該類提供的get,set方法進行訪問 
  11.     */  
  12.     private String name;  
  13.     private int age;  
  14.       
  15.     /* 
  16.      * 這裏我們定義的是構造方法,構造方法是用來進行變量初始化的 
  17.      * 因爲我們自定義了一個有參的構造方法,那麼系統就不會再自動生成 
  18.      * 無參的缺省構造方法了,但是一個好的編程習慣還是把這個卻省的構 
  19.      * 造方法寫上,this在這裏起的作用就是區分局部變量與成員變量 
  20.      * */  
  21.       
  22.     public Person(String name,int age)  
  23.     {  
  24.         this.name = name;  
  25.         this.age = age;  
  26.     }  
  27.     public Person(){}  
  28.       
  29.     /* 
  30.      * 接着到成員方法的定義了; 
  31.      * 我們先定義set和get的方法; 
  32.      * 可以理解爲通過這個方法爲外界提供一個接口 
  33.      * 別的類可以通過這個接口訪問相關屬性的值 
  34.      * */  
  35.       
  36.   
  37.     public String getName() {  
  38.         return name;  
  39.     }  
  40.     public void setName(String name) {  
  41.         this.name = name;  
  42.     }  
  43.     public int getAge() {  
  44.         return age;  
  45.     }  
  46.     public void setAge(int age) {  
  47.         this.age = age;  
  48.     }  
  49.       
  50.     //定義打印信息的方法  
  51.     public void printMsg()  
  52.     {  
  53.         System.out.printf("姓名: "+name+"\n年齡:  "+age);  
  54.     }  
  55.       
  56. }  



PersonTest.java


  1. package com.jay.example;  
  2.   
  3. public class PersonTest {  
  4.     public static void main(String[] args) {  
  5.           
  6.         String pname = null;  
  7.         int page = 0;  
  8.           
  9.           
  10.         //將Person類實例化爲對象  
  11.         Person p = new Person("小豬",20);  
  12.         p.printMsg();  
  13.           
  14.         //通過get方法獲得參數,自己輸出  
  15.         pname = p.getName();  
  16.         page = p.getAge();  
  17.         System.out.println("\n姓名: "+pname+"\n年齡:  "+page);  
  18.           
  19.         //通過set方法設置參數,調用printMsg打印信息  
  20.         p.setName("大豬");  
  21.         p.setAge(25);  
  22.         p.printMsg();  
  23.     }  
  24. }  


執行效果圖:





總結:

在這一小節裏面,我們對類與對象進行了初步的解析;

對類與對象的定義,構造方法,作用域等進行了學習

通過案例可以進一步加深大家對類與對象的瞭解


好了,這一節就到這裏了,如果有什麼疑問,錯誤,紕漏,或者

好的建議,望讀者指出,不甚感激!(*^__^*) 嘻嘻……


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