java aggregation是什么,讓我們一起了解一下?
aggregation是association里的一個特殊的分類,aggregation里的關系只能是單向的,而association單向和雙向均可。java中的aggregation就是建立了一個類,然后在其他地方引用來使用。
舉個例子,比如有兩個類是Student和Address,在特定情境下,每一個student的對象一定包含了一個Address的對象,而每一個address可以只含有街道名稱或是門牌號,不一定是個學生的地址,所以不一定需要student的一個對象作為屬性,因此這里就是aggregation。
實戰操作:
package?com.ray.ch05; public?class?Test?{ public?static?void?main(String[]?args)?{ } }
package?com.ray.ch05; public?class?Test2{ public?static?void?main(String[]?args)?{ new?Test(); } }
建立了Test這個類,我們可以在程序的任何地方new出來,就好像在Test2里面new一樣,這樣其實就是最簡單的聚合復用。
但是,我們在復用的時候需要注意一點,就是對象的初始化問題。
我們修改一下上面的代碼:
package?com.ray.ch05; ? public?class?Test?{ public?void?say()?{//增加了一個公共方法 System.out.println("method?say"); } ? public?static?void?main(String[]?args)?{ } }
package?com.ray.ch05; ? public?class?Test2?{ private?Test?test;//引用Test ? private?void?runSay()?{ test.say(); } ? public?static?void?main(String[]?args)?{ new?Test2().runSay(); } }
運行輸出:
Exception?in?thread?"main"?java.lang.NullPointerException ?at?com.ray.ch05.Test2.runSay(Test2.java:7) ?at?com.ray.ch05.Test2.main(Test2.java:11)
空指針錯誤,因為我們在Test2里面沒有實例化對象test,而默認的編譯器只是初始化為null,因此會有運行時錯誤。
因此,我們必須注意對象的初始化,因為它們不像基礎類型那樣,編譯器默認賦值。這個是編譯器的優化策略。
所以,我們Test2上面的代碼必須把Test這個類的對象實例化出來。
package?com.ray.ch05; ? public?class?Test2?{ private?Test?test=new?Test(); ? private?void?runSay()?{ test.say(); } ? public?static?void?main(String[]?args)?{ new?Test2().runSay(); } }
重新運行輸出:
method?say
以上就是小編今天的分享了,希望可以幫助到大家。