diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/ColorPoint.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/ColorPoint.java new file mode 100644 index 0000000000000000000000000000000000000000..c36ccb92fb1242908235f76d02150bac51e194d1 --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/ColorPoint.java @@ -0,0 +1,37 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +class Point { + private final int x, y; + private final String name; + + Point(int x, int y) { + this.x = x; + this.y = y; + name = makeName(); + } + + protected String makeName() { + return "[" + x + "," + y + "]"; + } + + public final String toString() { + return name; + } +} + +public class ColorPoint extends Point { + private final String color; + + ColorPoint(int x, int y, String color) { + super(x, y); + this.color = color; + } + + protected String makeName() { + return super.makeName() + ":" + color; + } + + public static void main(String[] args) { + System.out.println(new ColorPoint(4, 2, "purple")); + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/ConstructedObject.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/ConstructedObject.java new file mode 100644 index 0000000000000000000000000000000000000000..6e050dfc1990fab4dffafa535f20cbb200beedce --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/ConstructedObject.java @@ -0,0 +1,26 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +class ConstructedObject extends SuperObject { + + private static final String CONSTANT = print("CONSTANT"); + + static { + print("STATIC INITIALIZER"); + } + + private final String instance = print("instance"); + + ConstructedObject() { + super(print("hello")); + print("CONSTRUCTOR"); + } + + private static final String CONSTANT2 = print("CONSTANT2"); + + private final String instance2 = print("instance2"); + + static String print(String message) { + System.out.println("ConstructedObject." + message); + return null; + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/DynamicPolymorphism.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/DynamicPolymorphism.java new file mode 100644 index 0000000000000000000000000000000000000000..889f9cc59b0785db76311b39434886b51686e2f3 --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/DynamicPolymorphism.java @@ -0,0 +1,29 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +public class DynamicPolymorphism { + + static class A { + String get = "A"; + + String get() { + return "A"; + } + } + + static class B extends A { + String get = "B"; + + String get() { + return "B"; + } + } + + static void print(A value) { + System.out.println(value.get); + System.out.println(value.get()); + } + + public static void main(String[] args) { + print(new B()); + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/Finalizer.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/Finalizer.java new file mode 100644 index 0000000000000000000000000000000000000000..9350e48dccad477f8f718ec7133ff9918cd9b37b --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/Finalizer.java @@ -0,0 +1,16 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +public class Finalizer { + + @Override + protected void finalize() throws Throwable { + super.finalize(); + System.out.println("I'm free!"); + } + + public static void main(String[] args) { + for (int i = 0; i < 1000000; i++) { + Finalizer f = new Finalizer(); + } + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/InitializationOrder.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/InitializationOrder.java new file mode 100644 index 0000000000000000000000000000000000000000..2b942fa9176dd4d5636128268ce4a51d9542b794 --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/InitializationOrder.java @@ -0,0 +1,8 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +public class InitializationOrder { + + public static void main(String[] args) { + ConstructedObject constructedObject = new ConstructedObject(); + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/Leak.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/Leak.java new file mode 100644 index 0000000000000000000000000000000000000000..285b3ec7f5e391be2ac6111c2500aa45d46576f3 --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/Leak.java @@ -0,0 +1,15 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +import java.util.ArrayList; +import java.util.List; + +public class Leak { + private static List<Leak> l; + + public static void main(String[] args) { + l = new ArrayList<>(); + for (int i = 0; i < 1000000000; i++) { + l.add(new Leak()); + } + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/SuperObject.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/SuperObject.java new file mode 100644 index 0000000000000000000000000000000000000000..2f01f65122e8969e0f92aeed51b2966a8383f686 --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/SuperObject.java @@ -0,0 +1,25 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +class SuperObject { + + private static final String CONSTANT = print("CONSTANT"); + + static { + print("STATIC INITIALIZER"); + } + + private final String instance = print("instance"); + + SuperObject(String arg) { + print("CONSTRUCTOR"); + } + + private static final String CONSTANT2 = print("CONSTANT2"); + + private final String instance2 = print("instance2"); + + static String print(String message) { + System.out.println("SuperObject." + message); + return null; + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/This.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/This.java new file mode 100644 index 0000000000000000000000000000000000000000..b4ff31a9abe41fe05de65ecc5ea2afd3c017808f --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/This.java @@ -0,0 +1,14 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +class This { + + private final int i; + + This() { + this(4); + } + + This(int i) { + this.i = i; + } +} diff --git a/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/TryWithResources.java b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/TryWithResources.java new file mode 100644 index 0000000000000000000000000000000000000000..6faa332bf7257bd0d9e8219c737e159119536769 --- /dev/null +++ b/src/main/java/uk/ac/cam/acr31/oop/democode1920/lecture7/TryWithResources.java @@ -0,0 +1,27 @@ +package uk.ac.cam.acr31.oop.democode1920.lecture7; + +import java.io.Closeable; + +public class TryWithResources implements Closeable { + + TryWithResources() { + System.out.println("Acquire"); + } + + public static void main(String[] args) { + System.out.println("start"); + try (TryWithResources t = new TryWithResources()) { + System.out.println("execute"); + // object exists + + } + System.out.println("done"); + // object still exists - but close will have been called + + } + + @Override + public void close() { + System.out.println("release"); + } +}