1. 程式人生 > 其它 >2017-03-02學習筆記

2017-03-02學習筆記

知識點

一、static

public class Spike
{
    public static void main(String[] args)
    {
        Counter a = new Counter();
        System.out.println(a.increment());
        System.out.println(a.anotherIncrement());
        Counter b = new Counter();
        System.out.println(b.increment());
    }
}
class Counter
{
    private static int count = 0;
    public int increment()
    {
        return count++;
    }
    public int anotherIncrement()
    {
        return ++count;
    }
}

count是靜態變數,為所有物件所共享,因此不管a.increment()還是b.increment()都會使count持續增加。 increment()方法返回當前count值,然後count增加1 antoherIncrement()方法讓count增加1,然後返回count值 第一次a.increment()返回值為0,此時count值為1 第二次a.anotherIncrement()先讓count+1再返回,返回值為2 第三次b.increment()先返回count當前值2,然後count+1

二、AOP面向切面

AOP的概念是Aspected Oriented Programming 面向方面程式設計。 好處:AOP將程式分解成各個方面或者說關注點。這使得可以模組化,相當橫向上分切了。它可以解決OOP和過程化方法不能夠很好解決的橫切(crosscut)問題,如:事務、安全、日誌等橫切關注。 實現AOP有幾種方式: 1.Spring 1.2版本中通過ProxyFactoryBean來實現aop,即通過動態代理來實現的,Aspect必須繼承MethodBeforeAdvice,MethodAfterAdvice等 2.Spring 2.0 AOP需要改的是FBI 這個類,而且它也不需要再實現某些介面 3.三使用標註(

@AspectJ)實現AOP AOP 和 OOP的區別:

```html
 1. 面向方面程式設計 AOP 偏重業務處理過程的某個步驟或階段,強調降低模組之間的耦合度,使程式碼擁有更好的移植性。  
 2. 面向物件程式設計 (oop) 則是對業務分析中抽取的實體進行方法和屬性的封裝。
 ```

也可以說 AOP 是面向業務中的動詞領域, OOP 面向名詞領域。 AOP 的一個很重要的特點是原始碼無關性,也就是說如果我們的系統中引用了 AOP 元件,即使我們把該元件去掉,系統程式碼也應該能夠編譯通過。要實現這一點,可以使用動態 proxy 模式。

三、jdbc橋接模式

橋接模式: 定義 :將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 意圖 :將抽象與實現解耦。 橋接模式所涉及的角色

  1. Abstraction :定義抽象介面,擁有一個Implementor型別的物件引用
  2. RefinedAbstraction :擴充套件Abstraction中的介面定義
  3. Implementor :是具體實現的介面,Implementor和RefinedAbstraction介面並不一定完全一致,實際上這兩個介面可以完全不一樣Implementor提供具體操作方法,而Abstraction提供更高層次的呼叫
  4. ConcreteImplementor :實現Implementor介面,給出具體實現 Jdk中的橋接模式:JDBC JDBC連線 資料庫 的時候,在各個資料庫之間進行切換,基本不需要動太多的程式碼,甚至絲毫不動,原因就是JDBC提供了統一介面,每個資料庫提供各自的實現,用一個叫做資料庫驅動的程式來橋接就行了四、抽象類 抽象類和普通類有三點區別: 1)抽象方法必須為public和protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public。 2)抽象類不能用來建立物件,但是它可以有構造方法,用來幫助子類例項化。 3)如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為abstract類。五、介面 介面的主要特點 1)介面中的成員變數預設都是public、static、final型別的,必須被顯示初始化。 2)介面中的方法預設都是public、abstract型別的。 3)介面中只能包含public、static、final型別的成員變數和public、abstract型別的成員方法。 4)介面沒有構造方法,不能被例項化。 5)一個介面不能實現另一個介面,但它可以繼承多個其他介面。 6)介面必須通過類來實現它的抽象方法。 7)與子類繼承抽象父類相似,當類實現了某個介面時,它必須實現介面中所有的抽象方法,否則這個類必須被定義為抽象類。 8)一個類只能繼承一個直接的父類,但能實現多個介面。六、抽象類和介面的區別 1)抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract方法; 2)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的; 3)介面中不能含有靜態程式碼塊以及靜態方法,而抽象類尅有靜態程式碼塊和靜態方法; 4)一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。 5)抽象類中的方法子類必須全部實現,不然子類也是抽象類,而介面中的抽象方法子類必須全部實現,是可選擇實現的。 6)抽象類是一種模板設計模式,而介面時一種行為規範。