From 1d5b17ad6c0c042d3c40e642e4ef8fa95eb8452b Mon Sep 17 00:00:00 2001 From: ramansahasi Date: Sat, 21 Oct 2017 00:19:48 +0530 Subject: [PATCH] BAEL-1210 Guide to the Static Keyword in Java (#2767) * Adding Source Files * Guide to the Static Keyword in Java - Test files --- .../java/com/baeldung/staticdemo/Car.java | 48 +++++++++++++++++++ .../com/baeldung/staticdemo/Singleton.java | 13 +++++ .../com/baeldung/staticdemo/StaticBlock.java | 28 +++++++++++ .../staticdemo/CarIntegrationTest.java | 14 ++++++ .../staticdemo/SingletonIntegrationTest.java | 15 ++++++ .../StaticBlockIntegrationTest.java | 17 +++++++ 6 files changed, 135 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/staticdemo/Car.java create mode 100644 core-java/src/main/java/com/baeldung/staticdemo/Singleton.java create mode 100644 core-java/src/main/java/com/baeldung/staticdemo/StaticBlock.java create mode 100644 core-java/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java create mode 100644 core-java/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java create mode 100644 core-java/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java diff --git a/core-java/src/main/java/com/baeldung/staticdemo/Car.java b/core-java/src/main/java/com/baeldung/staticdemo/Car.java new file mode 100644 index 0000000000..cdb3806c35 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/staticdemo/Car.java @@ -0,0 +1,48 @@ +package com.baeldung.staticdemo; + +/** + * This class demonstrates the use of static fields and static methods + * the instance variables engine and displacement are distinct for + * each and every object whereas static/class variable numberOfCars + * is unique and is shared across all objects of this class. + * + * @author baeldung + * + */ +public class Car { + private String name; + private String engine; + + public static int numberOfCars; + + public Car(String name, String engine) { + this.name = name; + this.engine = engine; + numberOfCars++; + } + + //getters and setters + public static int getNumberOfCars() { + return numberOfCars; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEngine() { + return engine; + } + + public void setEngine(String engine) { + this.engine = engine; + } + + public static void setNumberOfCars(int numberOfCars) { + Car.numberOfCars = numberOfCars; + } +} diff --git a/core-java/src/main/java/com/baeldung/staticdemo/Singleton.java b/core-java/src/main/java/com/baeldung/staticdemo/Singleton.java new file mode 100644 index 0000000000..de75af9d9d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/staticdemo/Singleton.java @@ -0,0 +1,13 @@ +package com.baeldung.staticdemo; + +public class Singleton { + private Singleton() {} + + private static class SingletonHolder { + public static final Singleton instance = new Singleton(); + } + + public static Singleton getInstance() { + return SingletonHolder.instance; + } +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/staticdemo/StaticBlock.java b/core-java/src/main/java/com/baeldung/staticdemo/StaticBlock.java new file mode 100644 index 0000000000..fde7afb090 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/staticdemo/StaticBlock.java @@ -0,0 +1,28 @@ +package com.baeldung.staticdemo; + +import java.util.LinkedList; +import java.util.List; + +public class StaticBlock { + private static List ranks = new LinkedList<>(); + + static { + ranks.add("Lieutenant"); + ranks.add("Captain"); + ranks.add("Major"); + } + + static { + ranks.add("Colonel"); + ranks.add("General"); + } + + //getters and setters + public static List getRanks() { + return ranks; + } + + public static void setRanks(List ranks) { + StaticBlock.ranks = ranks; + } +} diff --git a/core-java/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java b/core-java/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java new file mode 100644 index 0000000000..3150627269 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java @@ -0,0 +1,14 @@ +package com.baeldung.staticdemo; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class CarIntegrationTest { + @Test + public void whenNumberOfCarObjectsInitialized_thenStaticCounterIncreases() { + new Car("Jaguar", "V8"); + new Car("Bugatti", "W16"); + assertEquals(2, Car.numberOfCars); + } +} diff --git a/core-java/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java b/core-java/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java new file mode 100644 index 0000000000..28d864073a --- /dev/null +++ b/core-java/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java @@ -0,0 +1,15 @@ +package com.baeldung.staticdemo; + +import org.junit.Assert; +import org.junit.Test; + +public class SingletonIntegrationTest { + + @Test + public void givenStaticInnerClass_whenMultipleTimesInstanceCalled_thenOnlyOneTimeInitialized() { + Singleton object1 = Singleton.getInstance(); + Singleton object2 = Singleton.getInstance(); + + Assert.assertSame(object1, object2); + } +} diff --git a/core-java/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java b/core-java/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java new file mode 100644 index 0000000000..f98e3e14db --- /dev/null +++ b/core-java/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java @@ -0,0 +1,17 @@ +package com.baeldung.staticdemo; + +import static org.hamcrest.collection.IsIterableContainingInOrder.contains; +import static org.junit.Assert.assertThat; + +import java.util.List; + +import org.junit.Test; + +public class StaticBlockIntegrationTest { + + @Test + public void whenAddedListElementsThroughStaticBlock_thenEnsureCorrectOrder() { + List actualList = StaticBlock.getRanks(); + assertThat(actualList, contains("Lieutenant", "Captain", "Major", "Colonel", "General")); + } +}