開心生活站

位置:首頁 > IT科技 > 

java,aggregation

IT科技2.53W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java aggregation是什麼,讓我們一起了解一下?

aggregation是association裏的一個特殊的分類,aggregation裏的關係只能是單向的,而association單向和雙向均可。java中的aggregation就是建立了一個類,然後在其他地方引用來使用。

舉個例子,比如有兩個類是Student和Address,在特定情境下,每一個student的對象一定包含了一個Address的對象,而每一個address可以只含有街道名稱或是門牌號,不一定是個學生的地址,所以不一定需要student的一個對象作為屬性,因此這裏就是aggregation。

java 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

標籤:java