《Thinking in java》-學習筆記(5)

學習第五章的筆記如下:

五.第五章 隱藏實施過程

        講一下自己的一些體會理解:

(1)其實這一章主要講的是怎樣才能把發生變化的東西與保持不變的東西分隔開。

(2)每個源碼文件內只能有一個public類,而且這個類名要跟文件名相同,剩下的類在那個包外是不能訪問的

,通常是一些輔助類。

//Test.java
public class Test{
    public static void main(String[] args){ 
    }
}

(3)可以把一系列的 .class 文件封裝和壓縮到一個JAR文件裏,可以使用JAR工具。Java解釋器負責對這些文

件的尋找、裝載和解釋。

(4)package:Java包封裝的約定,名字內的所有字母應該要小寫

(5)package和import允許我們做的事情那個就是分割單個全局命名空間,保證我們不會遇到名字衝突。

(6)編譯器強迫package名的第一部分是類創建者的域名。比如我們的域名是 “oypj.com” 要創建的庫名爲“util”

最後得到的包名爲 :

package com.oypj.util; 

用這個包名作爲下面這個文件的命名空間:

//Test.java
package com.oypj.util;
public class Test{
    public void foo(){
       System.out.println("oyoj");   
    }
}

然後把這個文件放在 c:\javaTest\com\oypj\util 目錄下。此時我們會發現包名 "com.oypj.util",前面的部分是

由classpath環境變量決定的。我們可以在另外的文件夾中寫個程序調用這個包,在這裏就不做測試了。

(7)自動編譯:爲導入的類首次創建一個對象時,編譯器會在適當的目錄裏面找同名的 .class 文件。若在相同目

錄中還發現了一個同名的.java文件,編譯器會比較兩個文件的日期,如果.java文件比.class新,就會自動編譯.java

生成一個最新的.class。

(8)自定義工具庫,可以減少或者消除重複代碼,我已經在寫自己的庫了,感覺很舒服。不過要注意一下這個庫

的包名跟存放的位置參考(6)。

(9)類路徑的每個地方,每個名字都僅存在一個類。

 (10)利用導入改變行爲:類似c的“條件編譯”,可以用在調試代碼。

package com.oypj.test.debug;
public class Assert{
    private static void perr(String msg){
        System.out.println(msg);
    }
    public final static void is_true(boolean exp){
        if(!exp) perr("Assertion faild");
    }
}

package com.oypj.test;
public class Assert{
    private static void perr(String msg){}
    public final static void is_true(boolean exp){}
}

如果我們在使用的時候導入的是

import com.oypj.test.debug

那麼調用Assert中的方法就會打印出調試的信息。

如果用的是

import com.oypj.test

那麼原來的代碼不需要改動,就可以把代碼從調試版本變成最終版本。

(11)“友好的”:如果沒有指定訪問指示符,就會默認是“友好的”,那麼在同一個包內,其他所有類都可以

訪問“友好的”成員。友好元素擁有“包訪問權限”。

(12)private:只有自己類內部的方法才能訪問那個成員,可以防止別人對這個內部實現的修改。在涉及多線程

處理的時候就非常有用。把默認構建器設置爲private,可以防止這個類被繼承,實例化只能通過這個類提供的統

一方法。類soup的對象被創建成static private 成員,可以通過 public 方法訪問。

(13)protected:當一個類繼承了另一個包的類,則在這個類內不能訪問到另一個包的類的友好的成員。如果要

訪問的話,就在另一個包的類的成員加上protected。

(14)本章主要講的內容的邏輯是,先講怎麼把一組類封裝到一個庫裏,其次我們怎麼控制對自己成員的訪問,從

而來達到隱藏實施過程的目的。



發佈了43 篇原創文章 · 獲贊 14 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章