invariant encapsulation life cycle of an object 1. created - on the heap 2. (fields cannot be modified) methods are invoked 3. destroyed? class A { ... .... } A aobj = new A(); // 1. 1000 6246 1. 2. aobj --| |----| |---|1000|---------------- \-----/ aobj = new A(); // 2. 1000 6246 1. 2. aobj --| |----| |---|6246|---------------- aobj = null; A aobj = new A(); // 1. A bobj = aobj; aobj = new A(); // 2. A aobj = new A(); // 1. aobj = new A(); // 2. not Java: pointers Java: references garbage collection (new A()).f(); list.add(new A()); class A { int val; String text; double dval1; Double dval2; } aobj val text dval1 dval2 1234 6789 ---|5 |1234|1.457|6789|---|"foo"|---|1.457|--------------------- A aobj = new A(); aobj.val = 5; aobj.text = "foo"; aobj.dval1 = 1.457; aobj.dval2 = new Double(1.457); int[] ia1 = new int[3]; Integer[] ia2 = new Integer[3]; ia1 addr1 ia2 addr3 addr2 -|1|2|3|---|1|---|addr1|addr2|addr3|-----|3|------|2|-----------------------------------