java類與對象你了解多少?

awayhuhu 8年前發布 | 12K 次閱讀 Java Java開發

面向對象程序設計概述

類是構造對象的模板或者藍圖,由類構造對象的過程稱為創建類的實例

1.java編寫的代碼都處于某個類的內部,java標準庫提供了幾千個類可以供使用,但是任然還需要在java中創建自己的類。

2.java面向對象編程(OOP)的三大特性:封裝、繼承、多態。

不是所有的類都具有面向對象的特性:如Math類。

3.基本關系

  • 依賴(use-a) 一個類的方法操縱另一個類的對象。依賴應該盡可能的減少。
  • 聚合(has-a) 一個類的對象包含其它類的對象。
  • 繼承(is-a)利用現有的類創建一個新類,實現代碼的復用,降低開發的復雜性。

4.預定義類與自定義類

  • java標準類庫
  • 用戶自定義類,主力類(workhorse class)
    通常自定義類中都有實例域和實例方法,而沒有main方法(每個類可以有自己的main方法進行調試,但是當主程序中的main方法執行后,其它類中的main方法是不會執行的),要想創建一個完整的程序,就必須將若干的類組合起來,而其中只有一個main方法。
class Teacher{
    //在創建實例域時,實例域應該標記為private,盡量不要標記為public。
    private String name;
    private int age;
    //類中的所有的方法都為public,意味著任何類的方法都可以調用這些方法
    //構造器方法
    public Teacher(String name,int age){
        this.name = name;
        this.age = age;
    }
    //訪問器方法
    public String getName(){
        return name;
    }

    public int getAge(){
        return age;
    }
}

對象

主要特性(針對同一個類的對象實例)

  1. 對象的行為:對對象施加的操作或者方法。

    2.對象的狀態:施加方法時的對象的響應,每個對象都保存著描述當前特征的信息,必須是由調用方法實現。

    3.對象標識:辨別具有相同行為與狀態的不同對象,每個對象標識一定不同。

對象的幾個特性之間相互影響

基本概念

  • 對象
    java中利用構造器創建對象,利用 new操作符+構造器 可以創建一個對象,構造器是與類名相同的一種特殊的方法。
  • 對象變量

    使用new操作符創建的對象,只能使用一次(每次調用new+構造器創建的對象都是新的),如果想要多次使用,就需要將創建的對象儲存在一個變量中,而這個變量本身并不是對象。需要 類名 變量名 = new 構造器 將其初始化之后,對象變量才能引用對象。初始化變量可以新構造一個變量,也可以引用一個已經存在的對象,此時后者的兩個對象變量都指向同一個對象。 任何對象變量的值都是對儲存在另外一個地方的一個對象的引用。 顯示將對象變量設置為null,就表明這個對象變量當前沒有引用任何對象,將一個方法應用于一個值為null的對象上,就會產生運行時錯誤。

    方法

    更改器方法與訪問器方法(getter()&&setter())

    對于一個實例域可以只設置起的訪問器方法使其成為一個只讀域,可以保證其不會受到外部數據的破壞。有時候需要對實例域進行修改時可以對某個實例域添加修改器方法,有了修改器方法當一個數據出現問題時可以快速地確定錯誤出現的位置。注意不要編寫返回可變對象的訪問器方法。如果需要返回一個可變對象的引用,需要使用clone方法。 類的方法時刻以訪問該類的任何一個對象的私有域的。

  • 訪問器
    java語言要求數據的可靠性和重用性,當一個類想要訪問另一個類的實例域時,由于實例域一般采用private定義,所以不能夠直接訪問,需要使用訪問器來進行訪問,并且訪問器方法是不能夠修改類的實例域的。
  • 更改器
    對實例域能夠進行更改的方法。使用更改器方法可以執行錯誤檢查。

構造器方法

  • 構造器與類同名
  • 每個類可以有一個以上的構造器
  • 構造器可以有一個及以上的參數
  • 構造器沒有返回值
  • 構造器總是伴隨著new操作符一起調用
  • 構造器中的局部變量不要和實例變量同名,否則會將其屏蔽。

實例域

  • final實例域 對象構造時必須將其初始化,并且在之后的操作中不能再對其進行修改。final修飾符大都應用于基本的數據類型、或者不可變類的域。要注意對象的引用被設置為final時,該對象并不一定為一個常量,所以可變的類在使用final時可能會引發混亂。
  • 靜態域 當利用static將一個實例域定義為靜態域時,每個類中只有一個這樣的域,靜態域獨立存在,是類的一部分,不屬于任何對象(靜態方法類似)。而每一個對象的所有的實例域都是該類所有實例域的一個拷貝。
  • 靜態常量 靜態常量可以被設計為共有的域,這樣的域不再允許被賦其他值。

隱式參數與顯式參數

方法有兩個參數,一個是隱式參數,是出現在方法名之前的類對象,在每一個方法中用關鍵字this表示,另一個為顯式參數,即方法名括號中的數值。在構造器方法中,利用this參數可以將局部變量與實例變量很好的區分開來,有助于代碼的閱讀。

私有方法

如果一個方法是私有的,那么它就不會被外部的類調用,是可以將其刪去的,所以當代碼進行重構時,如果某些私有方法的功能被重新編寫,那么就可以將其去掉,并不會影響程序的使用,外部的類是對其沒有依賴關系的。

靜態方法(類方法)

在使用時,不用依賴于任何的對象,沒有隱式參數。不能操作對象,可以訪問自身類中的靜態域(拷貝)。在調用時使用類名可以很好地區分靜態方法與其他方法。

工廠方法

main方法靜態的main方法在程序開始時執行并創建程序需要的對象。

1. 本地方法可以繞過java的存儲控制機制

2. javac編譯文件時類似于linux下的make(c編譯),對于某些源文件不會顯式編譯,而是在編譯某些文件(包含其它源文件)時自動的查找并進行編譯。

有點累,后續更新

 

來自: http://www.imooc.com/article/8583

 

 本文由用戶 awayhuhu 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!