diff --git a/src/main/java/com/examplehub/basics/Final.java b/src/main/java/com/examplehub/basics/Final.java deleted file mode 100644 index 926e7aed..00000000 --- a/src/main/java/com/examplehub/basics/Final.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.examplehub.basics; - -public class Final { - public static void main(String[] args) { - final double PI = 3.1415926; - - /* - PI = 3.14; // can't be assigned again - */ - - final int number; - /* - System.out.println(number); //Variable 'number' might not have been initialized - */ - } -} diff --git a/src/main/java/com/examplehub/basics/constant/FinalExample.java b/src/main/java/com/examplehub/basics/constant/FinalExample.java new file mode 100644 index 00000000..4af26c7b --- /dev/null +++ b/src/main/java/com/examplehub/basics/constant/FinalExample.java @@ -0,0 +1,4 @@ +package com.examplehub.basics.constant; + +public class FinalExample { +} diff --git a/src/main/java/com/examplehub/basics/TypeCast.java b/src/main/java/com/examplehub/basics/conversion/TypeCast.java similarity index 91% rename from src/main/java/com/examplehub/basics/TypeCast.java rename to src/main/java/com/examplehub/basics/conversion/TypeCast.java index e4737b13..56324215 100644 --- a/src/main/java/com/examplehub/basics/TypeCast.java +++ b/src/main/java/com/examplehub/basics/conversion/TypeCast.java @@ -1,4 +1,4 @@ -package com.examplehub.basics; +package com.examplehub.basics.conversion; public class TypeCast { public static void main(String[] args) { diff --git a/src/main/java/com/examplehub/basics/conversion/TypeConversionExample.java b/src/main/java/com/examplehub/basics/conversion/TypeConversionExample.java new file mode 100644 index 00000000..c21d3deb --- /dev/null +++ b/src/main/java/com/examplehub/basics/conversion/TypeConversionExample.java @@ -0,0 +1,4 @@ +package com.examplehub.basics.conversion; + +public class TypeConversionExample { +} diff --git a/src/main/java/com/examplehub/basics/function/ModifyFunctionArgs.java b/src/main/java/com/examplehub/basics/function/ModifyFunctionArgs.java new file mode 100644 index 00000000..32d419ae --- /dev/null +++ b/src/main/java/com/examplehub/basics/function/ModifyFunctionArgs.java @@ -0,0 +1,15 @@ +package com.examplehub.basics.function; + +public class ModifyFunctionArgs { + static class MyObj{ + public int age = -1; + } + + public static void modify(int num, String str, Integer integer, int[] array, MyObj obj) { + num = num + 1; + str = "<" + str + ">"; + integer = integer + 1; + array[0] = -array[0]; + obj.age = -obj.age; + } +} diff --git a/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample1.java b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample1.java new file mode 100644 index 00000000..2860143a --- /dev/null +++ b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample1.java @@ -0,0 +1,11 @@ +package com.examplehub.designpatterns.singleton; + +public class SingletonExample1 { + private static final SingletonExample1 INSTANCE = new SingletonExample1(); + private SingletonExample1(){ + + } + public static SingletonExample1 getInstance() { + return INSTANCE; + } +} diff --git a/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample2.java b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample2.java new file mode 100644 index 00000000..dcece1bd --- /dev/null +++ b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample2.java @@ -0,0 +1,17 @@ +package com.examplehub.designpatterns.singleton; + +public class SingletonExample2 { + private static final SingletonExample2 INSTANCE; + + static { + /* + * do more work here + */ + INSTANCE = new SingletonExample2(); + } + private SingletonExample2(){ + } + public static SingletonExample2 getInstance() { + return INSTANCE; + } +} diff --git a/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample3.java b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample3.java new file mode 100644 index 00000000..9ac01d17 --- /dev/null +++ b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample3.java @@ -0,0 +1,5 @@ +package com.examplehub.designpatterns.singleton; + +public enum SingletonExample3 { + INSTANCE +} diff --git a/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample4.java b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample4.java new file mode 100644 index 00000000..dd033262 --- /dev/null +++ b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample4.java @@ -0,0 +1,15 @@ +package com.examplehub.designpatterns.singleton; + +public class SingletonExample4 { + private static SingletonExample4 INSTANCE; + + private SingletonExample4(){ + } + + public static SingletonExample4 getInstance() { + if (INSTANCE == null) { + INSTANCE = new SingletonExample4(); + } + return INSTANCE; + } +} diff --git a/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample5.java b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample5.java new file mode 100644 index 00000000..fe763f74 --- /dev/null +++ b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample5.java @@ -0,0 +1,19 @@ +package com.examplehub.designpatterns.singleton; + +public class SingletonExample5 { + private static SingletonExample5 INSTANCE; + + private SingletonExample5(){ + } + + public static SingletonExample5 getInstance() { + if (INSTANCE == null) { + synchronized (SingletonExample5.class) { + if (INSTANCE == null) { + INSTANCE = new SingletonExample5(); + } + } + } + return INSTANCE; + } +} diff --git a/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample6.java b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample6.java new file mode 100644 index 00000000..648725c1 --- /dev/null +++ b/src/main/java/com/examplehub/designpatterns/singleton/SingletonExample6.java @@ -0,0 +1,15 @@ +package com.examplehub.designpatterns.singleton; + +public class SingletonExample6 { + + private SingletonExample6(){ + } + + private static final class InstanceHolder { + private static final SingletonExample6 INSTANCE = new SingletonExample6(); + } + + public static SingletonExample6 getInstance() { + return InstanceHolder.INSTANCE; + } +} diff --git a/src/test/java/com/examplehub/basics/chars/CharExampleTest.java b/src/test/java/com/examplehub/basics/chars/CharExampleTest.java index 2a874099..7dcd997f 100644 --- a/src/test/java/com/examplehub/basics/chars/CharExampleTest.java +++ b/src/test/java/com/examplehub/basics/chars/CharExampleTest.java @@ -23,4 +23,13 @@ void testUnicode() { assertEquals('A', '\u0041'); assertEquals('δΈ­', '\u4e2d'); } + + @Test + void testAddAndSub() { + assertEquals('9', '0' + 9); + assertEquals(43, '0' - 5); + assertEquals(32, 'a' - 'A'); + assertEquals(9, '9' - '0'); + assertEquals(0, 'a' - 97); + } } diff --git a/src/test/java/com/examplehub/basics/chars/StringBuilderExampleTest.java b/src/test/java/com/examplehub/basics/chars/StringBuilderExampleTest.java index 2ac20bba..a63fff58 100644 --- a/src/test/java/com/examplehub/basics/chars/StringBuilderExampleTest.java +++ b/src/test/java/com/examplehub/basics/chars/StringBuilderExampleTest.java @@ -11,4 +11,14 @@ void testAppend() { builder.append("Hello").append(",").append("World").append("!"); assertEquals("Hello,World!", builder.toString()); } + + @Test + void testInitCapacity() { + String firstStr = "123456789"; + String secondStr = "987654321"; + String thirdStr = "abcef"; + + StringBuilder builder = new StringBuilder(firstStr.length() + secondStr.length() + thirdStr.length()); + assertEquals("123456789987654321abcef", builder.append(firstStr).append(secondStr).append(thirdStr).toString()); + } } diff --git a/src/test/java/com/examplehub/basics/chars/StringExampleTest.java b/src/test/java/com/examplehub/basics/chars/StringExampleTest.java index a3c1103f..3f701452 100644 --- a/src/test/java/com/examplehub/basics/chars/StringExampleTest.java +++ b/src/test/java/com/examplehub/basics/chars/StringExampleTest.java @@ -21,6 +21,14 @@ void testInit() { assertEquals("abc", abc); } + @Test + void testPlusOperator() { + assertEquals("Hi, Java", "Hi, " + "Java"); + assertEquals("Hi 3", "Hi " + 3); + assertEquals("Hi 3.14", "Hi " + 3.14); + assertEquals("3Hi4", 3 + "Hi" + 4); + assertEquals("Hi10", "Hi" + 0xA); + } @Test void testEqual() { String s1 = "hello"; @@ -88,11 +96,9 @@ void testSubstring() { void testConcat() { String s1 = "hello"; String s2 = " world!"; - assertEquals("hello world!", s1 + s2); assertEquals("hello world!", s1.concat(s2)); - int age = 25; - assertEquals("I'm 25.", "I'm ".concat(25 + ".")); + assertEquals("I'm 25.", "I'm ".concat(age + ".")); } // @Test diff --git a/src/test/java/com/examplehub/basics/constant/FinalExampleTest.java b/src/test/java/com/examplehub/basics/constant/FinalExampleTest.java new file mode 100644 index 00000000..f0d453c9 --- /dev/null +++ b/src/test/java/com/examplehub/basics/constant/FinalExampleTest.java @@ -0,0 +1,36 @@ +package com.examplehub.basics.constant; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class FinalExampleTest { + @Test + void test() { + final double PI = 3.1415927; + assertEquals(3.1415927, PI); + + //PI = 3.14; // cannot assign a value to final variable PI + } + + @Test + void testWithoutInit() { + final double PI; + //System.out.println(PI); // variable PI might not have been initialized + } + + @Test + void testInitLater() { + final double PI; + PI = 3.1415927; + assertEquals(3.1415927, PI); + } + + @Test + void testStatic() { + class MyMath { + public static final double PI = 3.1415927; + } + assertEquals(3.1415927, MyMath.PI); + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/basics/conversion/TypeConversionExampleTest.java b/src/test/java/com/examplehub/basics/conversion/TypeConversionExampleTest.java new file mode 100644 index 00000000..a4c8be76 --- /dev/null +++ b/src/test/java/com/examplehub/basics/conversion/TypeConversionExampleTest.java @@ -0,0 +1,28 @@ +package com.examplehub.basics.conversion; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; + +import static org.junit.jupiter.api.Assertions.*; + +class TypeConversionExampleTest { + @Test + void testObjectConversion() { + class A { + + } + class B { + + } + // A a = new B(); // incompatible types: B cannot be converted to A + + class Father { + } + class Son extends Father { + } + Father father = new Son(); // ok + assertThrows(ClassCastException.class, () -> { + Son son = (Son) new Father(); + }); + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/basics/function/ModifyFunctionArgsTest.java b/src/test/java/com/examplehub/basics/function/ModifyFunctionArgsTest.java new file mode 100644 index 00000000..016f83a0 --- /dev/null +++ b/src/test/java/com/examplehub/basics/function/ModifyFunctionArgsTest.java @@ -0,0 +1,22 @@ +package com.examplehub.basics.function; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ModifyFunctionArgsTest { + @Test + void test() { + int num = 1; + String str = "java"; + Integer integer = 55; + int[] array = {1, 2, 3, 4, 5}; + ModifyFunctionArgs.MyObj obj = new ModifyFunctionArgs.MyObj(); + ModifyFunctionArgs.modify(num, str, integer, array, obj); + assertEquals(1, num); + assertEquals("java", str); + assertEquals(55, integer); + assertEquals(-1, array[0]); + assertEquals(1, obj.age); + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample1Test.java b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample1Test.java new file mode 100644 index 00000000..3ee01ed2 --- /dev/null +++ b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample1Test.java @@ -0,0 +1,14 @@ +package com.examplehub.designpatterns.singleton; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SingletonExample1Test { + @Test + void test() { + SingletonExample1 firstInstance = SingletonExample1.getInstance(); + SingletonExample1 secondInstance = SingletonExample1.getInstance(); + assertEquals(firstInstance.hashCode(), secondInstance.hashCode()); + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample2Test.java b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample2Test.java new file mode 100644 index 00000000..9bf71702 --- /dev/null +++ b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample2Test.java @@ -0,0 +1,14 @@ +package com.examplehub.designpatterns.singleton; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SingletonExample2Test { + @Test + void test() { + SingletonExample2 firstInstance = SingletonExample2.getInstance(); + SingletonExample2 secondInstance = SingletonExample2.getInstance(); + assertEquals(firstInstance.hashCode(), secondInstance.hashCode()); + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample3Test.java b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample3Test.java new file mode 100644 index 00000000..99de9ba2 --- /dev/null +++ b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample3Test.java @@ -0,0 +1,14 @@ +package com.examplehub.designpatterns.singleton; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SingletonExample3Test { + @Test + void test() { + SingletonExample3 firstInstance = SingletonExample3.INSTANCE; + SingletonExample3 secondInstance = SingletonExample3.INSTANCE; + assertEquals(firstInstance.hashCode(), secondInstance.hashCode()); + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample4Test.java b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample4Test.java new file mode 100644 index 00000000..97e2dae1 --- /dev/null +++ b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample4Test.java @@ -0,0 +1,19 @@ +package com.examplehub.designpatterns.singleton; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SingletonExample4Test { + @Test + void test() { + SingletonExample4 firstInstance = SingletonExample4.getInstance(); + SingletonExample4 secondInstance = SingletonExample4.getInstance(); + assertSame(firstInstance, secondInstance); + } + + @Test + void testMultiThreads() { + //TODO + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample5Test.java b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample5Test.java new file mode 100644 index 00000000..40e7b846 --- /dev/null +++ b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample5Test.java @@ -0,0 +1,19 @@ +package com.examplehub.designpatterns.singleton; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SingletonExample5Test { + @Test + void test() { + SingletonExample5 firstInstance = SingletonExample5.getInstance(); + SingletonExample5 secondInstance = SingletonExample5.getInstance(); + assertSame(firstInstance, secondInstance); + } + + @Test + void testMultiThreads() { + //TODO + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample6Test.java b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample6Test.java new file mode 100644 index 00000000..394615f3 --- /dev/null +++ b/src/test/java/com/examplehub/designpatterns/singleton/SingletonExample6Test.java @@ -0,0 +1,19 @@ +package com.examplehub.designpatterns.singleton; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SingletonExample6Test { + @Test + void test() { + SingletonExample6 firstInstance = SingletonExample6.getInstance(); + SingletonExample6 secondInstance = SingletonExample6.getInstance(); + assertSame(firstInstance, secondInstance); + } + + @Test + void testMultiThreads() { + //TODO + } +} \ No newline at end of file