第16條:複合優先於繼承

這裡的繼承是實現繼承而非介面繼承。與方法調用不同的是,繼承打破了封裝性:換句話說,子類依賴於其超類中特定功能的實現細節。超類的實現有可能會隨著髮型版本的不同而發生改變,如果真的發生了變化,子類可能會遭到破壞,即使他的代碼完全沒有改變。因此,子類必須跟著超類的更新而改變,除非超類是專門為擴充而設計的,並用具有很好的文檔說明。只有當子類真正是超類的子類型(subtype)時,才適合用繼承,也就是是“is-a”關係時。如果在適合於是用複合的地方是用了繼承,則會不必要的暴漏實現細節。這樣的到的API會把

第17條:要麼為繼承設計,並提供文檔說明,要麼就禁止繼承

首先,該類的文檔必須精確地描述覆蓋每個方法所帶來的影響。換句話說,該類必須有文檔說明他可覆蓋(overridable)的方法的自用型(self-use)。對於每個共有的或受保護的方法或構造器,他的文檔必須指明該方法或者構造器調用了哪些可覆蓋的方法,是以什麼順序調用的,每個調用的結果又是如何影響後續的處理過程的。更一般的,類必須在文檔中說明,在哪些情況下會調用可覆蓋的方法。(例如:背景線程或者靜態初始化可能會調用這個方法)按慣例,如果方法調用了可覆蓋的方法,在他的文檔注釋的末尾應該包含關於這些調用

第21條:用函數對象表示策略

函數對象:叫用作業符的類,其對象常稱為函數對象(function object),即它們是行為類似函數的對象。有些語言支援函數指標(function pointer)、代理(delegate)、lambda運算式(lambda expression),或者支援類似的機制,允許程式把“調用特殊函數的能力”儲存起來並傳遞這種能力。Java沒有提供函數指標,但是可以用對象引用實現同樣的功能。調用對象上的方法通常是執行該對象(that

序列化介面的id有什麼用?

 

配置tomcat ssi shtml

首先,tomcat去解析ssi是不明智的做法,最好讓tomcat去整合apache,讓apache解析靜態檔案。配置過程如下:目前主流的web伺服器都提供了SSI實現,我們只需要開啟SSI功能就可以使用。下面我們就介紹在Tomcat5.5下如何使用SSI技術:第一步:把$CATALINA_HOME/server/lib/servlets-ssi.renametojar的名稱改為servlets-ssi.jar第二步:設定$CATALINA_HOME/conf/context.xml檔案,在<

ThreadLocal 解決SimpleDateFormat非安全執行緒

大致意思:Tim Cull碰到一個SimpleDateFormat帶來的嚴重的效能問題,該問題主要有SimpleDateFormat引發,建立一個 SimpleDateFormat執行個體的開銷比較昂貴,解析字串時間時頻繁建立生命週期短暫的執行個體導致效能低下。即使將 SimpleDateFormat定義為靜態類變數,貌似能解決這個問題,但是SimpleDateFormat是非安全執行緒的,同樣存在問題,如果用

第18條:介面優於抽象類別

Java語言設計提供了兩種機制,可以用來定義允許多個實現的類型:介面和抽象類別。因為Java只允許單繼承,所以抽象類別作為類型定義受到了極大的限制。現有的類可以很容易被更新,以實現新的介面。一般來說,無法更新現有的類來擴充新的抽象類別。如果你希望兩個類來擴充一個抽象類別,就必須把抽象類別放到類型層次的高處,以便這兩個類的一個祖先成為他的子類。這樣會間接的傷害到類的層次,迫使這個公用祖先的所有後代類都擴充這個新的抽象類別,無論他對於這個後代類是否合適。介面是定義mixin(混合類型)的理想選擇。類

初始化與清理

隨著電腦革命的發展,“不安全”的編程方式已逐步成為編程代價高昂主要原因之一。初始化和清理(cleanup)正是涉及安全的兩個問題。用構造器確保初始化可以假想為編寫的每個類都添加initialize方法。該方法的名稱提醒你在使用其對象之前,應該先調用initialize()。然而,這同事意味著使用者必須記得自己去調用此方法。在Java中,通過提供構造器,類的設計者可確保每個對象都可以得到初始化。建立對象時,如果其具有構造器,Java就會在使用者有能力操作對象之前自動調用相應的構造器,從而保證初始化

Spring BeanFactory、ApplicationContext階層和BeanDefinition解析過程

先說層次架構// 水桶和上下文類層次概要(還有如何打水)// 當你在使用FileSystemXmlApplicationContext之類的類時,你會感覺裡面的方法調用錯綜複雜,層次很多。// 那麼,我們先從主要類的作用和層次說起,讓我們有個大體的概念和印象,便於後面的分析。class Waterpot {// 水桶:// 順序基本是按照繼承的先後順序// ***************************基本介面定義分支***************************// =====

第19條:介面只用於定義類型

當類實現介面時,介面就充當可以引用這個類的執行個體的類型(type)。因此類實現了介面,就表明用戶端可以對這個類的執行個體實施某些動作。為了其他目的而使用介面是不恰當的。常量介面(constant interface),使用這些常量的類實現這個介面,以避免用類名來修改常量名。常量介面模式是對介面的不良使用。如果這些常量最好被看作枚舉類型的成員,使用枚舉類型。否則,應該使用不可執行個體化的工具類來匯出這些常量。工具類通常要求用戶端用類名來修飾這些常量名。也可以使用靜態匯入,避免用類名修飾常量名。

第10條:始終要覆蓋toString

提供好的toString實現可以使類用起來更加舒適。 在實際應用中,toString方法應該返回對象中包含的所有值的關注的資訊。 在實現toString的時候,必須要做出一個很重要的決定:是否在文檔中指定傳回值的格式。 無論你是否決定指定格式,都應該在文檔中明確的表明你的意圖。 如果你要指定格式,則應該嚴格的這樣去做。 無論是否指定格式,都為toString傳回值中包含的所有資訊,提供一種編程式的訪問途徑。 

Bypass warning message when sending email from AX

Bypass warning message when sending email from AXOriginal text From : http://ax2009.spaces.live.com/blog/cns!27F885F1361EDC5!139.entry Question:How can I bypass the warning message below when I send the email from AX?"A program is trying to access e-

第20條:類層次優於標籤類

有時候,可能會遇到帶有兩個甚至更多風格的執行個體的類,並包含表示執行個體風格的標籤(tag)域。Demo:// Tagged class - vastly inferior to a class hierarchy!class Figure { enum Shape { RECTANGLE, CIRCLE }; // Tag field - the shape of this figure final Shape shape; // These fields are

Conver to date time between Chinese and Calendar

following Code is Chinese date time conver to Common calendar and Common Calendar conver to Chinese Calendar method. FYI. Author       : Jimmy xieWrite date : 2010-April - 14static void Jimmy_ChineseLunisolarDate(Args _args){ Dialog

增強for迴圈

l文法:Øfor ( type 變數名:集合變數名 )  { … } l注意事項:Ø迭代變數必須在( )中定義!Ø集合變數可以是數組或實現了Iterable介面的集合類l舉例:   public static int add(int x,int ...args) {  int sum = x;  for(int arg:args) {  sum += arg;  }  return sum;  }The enhanced for statement has the

散列與散列碼

Demo:按照你的想象,我們應該是可以查出來Groudhog gh = ghog.newInstance(3);這個key的,但是沒查到package cn.partner4java.hashcode;/** * 每個Groudhog被給予一個標識數字 * @author partner4java * */public class Groudhog {protected int number;public Groudhog(int number) {this.number = number;}@

hibernate.bytecode.use_reflection_optimizer

Enables the use of bytecode manipulation instead of runtime reflection. This is a System-level property and cannot be set in hibernate.cfg.xml. Reflection can sometimes be useful when troubleshooting. Hibernate always requires either CGLIB or

基礎資料型別 (Elementary Data Type)的自動拆箱與裝箱

/** * 自動裝箱: * Integer num1 = 12; * 自動拆箱: * System.out.println(num1 + 12); * 基礎資料型別 (Elementary Data Type)的對象緩衝: * Integer num1 = 12; * Integer num2 = 12;這塊相等,<=127都是真的 * System.out.println(num1 == num2); * Integer num3 = 129; 這塊不相等,

Spring技術內幕1 Spring的設計理念和整理架構

1Spring的各個子項目Spring Framework(Core):The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform. A key element of Spring is infrastructural

HQL的幾個小問題 .

 1. Unable to locate appropriate constructor on class ....     在類似 "select new UserVO(u.id, u.name) from User u where u.id>100"     這個時候要求UserVO必須有和(id, name)類型匹配的建構函式。2. Like的模糊比對:        view plaincopy to

總頁數: 61357 1 .... 16407 16408 16409 16410 16411 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.