《Java編程思想》讀書筆記-類與對象

歡迎各位讀者關注個人微信公衆號,共同探討Java相關技術。生命不止,學習不休!java

JavaCorner掃一掃關注我

也許你慢慢地對程序有了這樣的認識:程序只是一些列帶有方法的對象的組合,這些方法以其它對象爲參數,可在任何地方返回,併發送消息給其餘對象。這樣的認識,目前來講,是對的。

一覽焦點

  • Java中的類
  • 新建的對象去了哪裏
  • 誰來安置無家可歸的對象
  • 總結

Java中的類

決定了對象的外觀與行爲。Java中用class關鍵字來對類進行定義。

在Java中,容許程序員定義一個新的數據類型來知足其應用的需求。其形式爲class後跟上新類型的名稱。好比:程序員

class NewTypeName {
    //class definition
}

經過以上代碼,你就定義了一個新的名爲NewTypeName的數據類型。類型名稱能夠由程序員本身定義,而class關鍵字是必須的、大小寫敏感的,必定不能寫錯。可是單純地定義一個空類定義的類,是沒有任何意義的。設計模式

類最基本的做用,在於經過類獲取到相應的對象,在向對象發送消息時,以指望對象作某些特定的事情。
類的內部結構

在對類進行定義後,就能夠在類中設置如下兩種類型的元素:字段和方法。安全

先導概念微信

  1. 引用:Java中一切皆對象,所以採用一個指向對象的引用來操縱對象。併發

    • 引用具備操做對象的能力
    • 引用不必定須要有一個對象與之關聯
  2. 基本數據類型:Java中對於小而簡單的變量,採用對象的形式表示會致使本來輕量的變量變得無比厚重且耗費內存空間。因此Java中定義了8種基本數據類型,其直接存儲值,並置於虛擬機棧中。每種基本數據類型所佔存儲空間大小恆定不變。學習

    • 全部數值類型都有正負號
    • boolean類型所佔用的存儲空間的大小沒有明確指定,僅能取字面值true或false
    • 基本數據類型都有其對應的包裝類型
    • 對於高精度的數字,須要用BigInteger(支持任何精度的整數)或BigDecimal(支持任何精度的定點數)來表示,兩者沒有對應的基本類型
    • 基本數據類型以下表
基本類型 大小 包裝類型
boolean - Boolean
char 16bit Character
byte 8bit Byte
short 16bit Short
int 32bit Integer
long 64bit Long
float 32bit Float
double 64bit Double

字段spa

字段能夠是基本數據類型中的一種,也能夠是任何類型的對象,能夠經過其引用與其所指向的對象。若是是對某個對象的引用,那麼必須經過初始化使其與一個實際的對象關聯。設計

  1. 如何引用對象中的某個字段指針

    對象名稱.字段名稱

    示例

    class NewTypeName {
        int i;
        int j;
        int k;
    
        public static void main(String [] args) {
            NewTypeName type = new NewTypeName();
            //此處type是對象的名稱,其是一個引用,i/j/k分別是NewTypeName這個類中的字段
            type.i = 1;
            type.j = 2;
            type.k = 3;
        }
    }
  2. 基本成員默認值

    • 若是是基本數據類型並做爲類的成員使用時,即便沒有初始化,也會確保其有一個默認值,默認值以下表所示:
基本類型 默認值
boolean false
char 'u0000'(null)
byte 0
short 0
int 0
long 0l
float 0.0f
double 0.0d
  • 若是是基本類型且做爲方法的局部變量使用時,獲取的默認值可能爲人一直
  • 若是是引用類型,在沒有進行初始化的狀況下,默認爲null

方法

Java中方法用來表示用 用來作某些事情的方式。方法的基本構成部分包括:方法名稱、參數、返回值和方法體

一個方法的基本形式

ReturnType methodName(String arg1, Integer arg2) { /* Method Body */ }

構件解析

  • 返回類型:描述方法在調用以後返回的值
  • 方法名稱:程序員自定義的方法的名稱
  • 參數列表:描述了要從外部傳遞給方法體的參數的類型和名稱
  • 方法體:描述一個方法實際要作的事情
方法名稱和參數列表合起來稱爲「方法簽名」,其惟一肯定地標識出某個方法

在Java中,參數老是以值的形式進行傳遞。若是是基本數據類型,則傳遞的是類型的真值;若是是引用類型,則傳遞的是引用的值。Java中不存在引用傳遞
return關鍵字在Java的方法中表示返回,存在以下兩種狀況:

  • 若是返回類型不爲void,則在return後要跟上與返回類型相兼容的值
  • 若是返回類型爲void,則return關鍵字的做用只是用來退出方法,沒必要在return後跟任何返回值

新建的對象去了哪裏

在Java中,建立了一個引用變量後,最安全的方案就是爲其綁定一個實際存在的對象,能有效防止惱人的NullPointerException(空指針異常);
對象來自哪裏

Java中經過new操做符來實現對象的建立,其基本形式爲:

new NewTypeName();

其中new關鍵字,表示向堆中申請內存;NewTypeName表示一個數據類型,在申請到內存空間後,會以這個數據類型爲模板進行對象的實例化;實例化完成後,會對對象中的字段進行默認值填充。

對象存儲到什麼地方

在Java中有5個不一樣的地方能夠進行數據存儲:

  1. 寄存器:位於處理器內部,是最快的存儲區,不能由程序進行直接控制
  2. 虛擬機棧:位於隨機訪問存儲器(RAM)中,經過棧指針的移動進行內存分配以及內存回收,遵循上釋放下分配的原則;這一區域主要存放基本數據類型及數據引用
  3. 堆:位於RAM中,是一種通用的存儲池,對象存儲的地方。在此處,編譯器不須要知道存儲的數據在堆裏的生命週期,而由垃圾回收期進行管理
  4. 常量存儲:常量值一般直接存放在程序代碼內部
  5. 非RAM存儲:可徹底存活於程序外的數據。如流對象和持久化對象

誰來安置無家可歸的對象

無家可歸的對象,意味着沒有引用指向該對象,該對象找不到它的歸屬。

在大多數語言中,都存在做用域的概念。做用域決定了在其內部定義的變量名的可見性和生命週期。在Java中不容許嵌套的做用域中,較小的做用域擁有與較大的做用域相同的變量,以下代碼沒法經過編譯:

//此處的代碼沒法實際運行,只作演示
{
    int x = 11;
    {
        int x = 12;
    }
}

Java中貫徹了一切都是對象的觀念。對象不具有和基本數據類型同樣的生命週期。對象能夠存活於做用域以外

如如下代碼:

{
    String s = new String("Hello World");
}//運行到這裏,s已經在做用域以外

在上述代碼中,在超過做用域以後,引用變量s的生命週期已經結束,但"Hello World"這個String對象卻依舊存在。其生存於堆中,只是咱們再沒有引用變量來指向這個對象了,所以這個對象對於咱們來講是不可見的。

那麼另一個問題是,Java是如何來保障這些沒有引用變量指向的對象不會把內存塞爆的呢?Java採用了垃圾回收器,用來監視全部用new關鍵字建立的對象,若是一個對象再也不被引用,那麼垃圾收集器便會在隨後的內存回收活動中銷燬該對象,並釋放其所佔用的內存。所以,Java程序員是不須要太在意內存的回收的。

總結

本文主要以Java的類爲切入點,描述了從類到對象的建立,而後到對象的存放和銷燬的整個流程。因爲咱們大多數的時間都是在建立新的類來知足咱們的業務需求,所以一個類的內部結構異常重要,好的結構能最大化地提高程序運行效率。這涉及到後面講解的設計模式,在此只對類的構成做一個瞭解。

在下一節中,咱們嘗試運用目前已學習的內容,來完成咱們的第一個Java程序。

相關文章
相關標籤/搜索