diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml
new file mode 100644
index 0000000000..ea76ee8c98
--- /dev/null
+++ b/core-java-modules/core-java-reflection-2/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+ core-java-reflection-2
+ 0.1.0-SNAPSHOT
+ core-java-reflection-2
+ jar
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+ ../
+
+
+
+ core-java-reflection-2
+
+
+ src/main/resources
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${source.version}
+ ${target.version}
+ -parameters
+
+
+
+
+
+
+ 3.8.0
+ 1.8
+ 1.8
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java
new file mode 100755
index 0000000000..4e2f0fc0cc
--- /dev/null
+++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/access/privatefields/Person.java
@@ -0,0 +1,87 @@
+package com.baeldung.reflection.access.privatefields;
+
+public class Person {
+
+ private String name = "John";
+ private byte age = 30;
+ private short uidNumber = 5555;
+ private int pinCode = 452002;
+ private long contactNumber = 123456789L;
+ private float height = 6.1242f;
+ private double weight = 75.2564;
+ private char gender = 'M';
+ private boolean active = true;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public byte getAge() {
+ return age;
+ }
+
+ public void setAge(byte age) {
+ this.age = age;
+ }
+
+ public short getUidNumber() {
+ return uidNumber;
+ }
+
+ public void setUidNumber(short uidNumber) {
+ this.uidNumber = uidNumber;
+ }
+
+ public int getPinCode() {
+ return pinCode;
+ }
+
+ public void setPinCode(int pinCode) {
+ this.pinCode = pinCode;
+ }
+
+ public long getContactNumber() {
+ return contactNumber;
+ }
+
+ public void setContactNumber(long contactNumber) {
+ this.contactNumber = contactNumber;
+ }
+
+ public float getHeight() {
+ return height;
+ }
+
+ public void setHeight(float height) {
+ this.height = height;
+ }
+
+ public double getWeight() {
+ return weight;
+ }
+
+ public void setWeight(double weight) {
+ this.weight = weight;
+ }
+
+ public char getGender() {
+ return gender;
+ }
+
+ public void setGender(char gender) {
+ this.gender = gender;
+ }
+
+ public boolean isActive() {
+ return active;
+ }
+
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+}
diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java
new file mode 100644
index 0000000000..49e1b917b1
--- /dev/null
+++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/access/privatefields/AccessPrivateFieldsUnitTest.java
@@ -0,0 +1,168 @@
+package com.baeldung.reflection.access.privatefields;
+
+import java.lang.reflect.Field;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class AccessPrivateFieldsUnitTest {
+
+ @Test
+ public void whenGetIntegerFields_thenSuccess() throws Exception {
+ Person person = new Person();
+
+ Field ageField = person.getClass()
+ .getDeclaredField("age");
+ ageField.setAccessible(true);
+
+ byte age = ageField.getByte(person);
+ Assertions.assertEquals(30, age);
+
+ Field uidNumberField = person.getClass()
+ .getDeclaredField("uidNumber");
+ uidNumberField.setAccessible(true);
+
+ short uidNumber = uidNumberField.getShort(person);
+ Assertions.assertEquals(5555, uidNumber);
+
+ Field pinCodeField = person.getClass()
+ .getDeclaredField("pinCode");
+ pinCodeField.setAccessible(true);
+
+ int pinCode = pinCodeField.getInt(person);
+ Assertions.assertEquals(452002, pinCode);
+
+ Field contactNumberField = person.getClass()
+ .getDeclaredField("contactNumber");
+ contactNumberField.setAccessible(true);
+
+ long contactNumber = contactNumberField.getLong(person);
+ Assertions.assertEquals(123456789L, contactNumber);
+
+ }
+
+ @Test
+ public void whenDoAutoboxing_thenSuccess() throws Exception {
+ Person person = new Person();
+
+ Field pinCodeField = person.getClass()
+ .getDeclaredField("pinCode");
+ pinCodeField.setAccessible(true);
+
+ Integer pinCode = pinCodeField.getInt(person);
+ Assertions.assertEquals(452002, pinCode);
+ }
+
+ @Test
+ public void whenDoWidening_thenSuccess() throws Exception {
+ Person person = new Person();
+
+ Field pinCodeField = person.getClass()
+ .getDeclaredField("pinCode");
+ pinCodeField.setAccessible(true);
+
+ Long pinCode = pinCodeField.getLong(person);
+ Assertions.assertEquals(452002L, pinCode);
+ }
+
+ @Test
+ public void whenGetFloatingTypeFields_thenSuccess() throws Exception {
+ Person person = new Person();
+
+ Field heightField = person.getClass()
+ .getDeclaredField("height");
+ heightField.setAccessible(true);
+
+ float height = heightField.getFloat(person);
+ Assertions.assertEquals(6.1242f, height);
+
+ Field weightField = person.getClass()
+ .getDeclaredField("weight");
+ weightField.setAccessible(true);
+
+ double weight = weightField.getDouble(person);
+ Assertions.assertEquals(75.2564, weight);
+ }
+
+ @Test
+ public void whenGetCharacterFields_thenSuccess() throws Exception {
+ Person person = new Person();
+
+ Field genderField = person.getClass()
+ .getDeclaredField("gender");
+ genderField.setAccessible(true);
+
+ char gender = genderField.getChar(person);
+ Assertions.assertEquals('M', gender);
+ }
+
+ @Test
+ public void whenGetBooleanFields_thenSuccess() throws Exception {
+ Person person = new Person();
+
+ Field activeField = person.getClass()
+ .getDeclaredField("active");
+ activeField.setAccessible(true);
+
+ boolean active = activeField.getBoolean(person);
+ Assertions.assertTrue(active);
+ }
+
+ @Test
+ public void whenGetObjectFields_thenSuccess() throws Exception {
+ Person person = new Person();
+
+ Field nameField = person.getClass()
+ .getDeclaredField("name");
+ nameField.setAccessible(true);
+
+ String name = (String) nameField.get(person);
+ Assertions.assertEquals("John", name);
+ }
+
+ @Test
+ public void givenInt_whenGetStringField_thenIllegalArgumentException() throws Exception {
+ Person person = new Person();
+ Field nameField = person.getClass()
+ .getDeclaredField("name");
+ nameField.setAccessible(true);
+
+ Assertions.assertThrows(IllegalArgumentException.class, () -> nameField.getInt(person));
+ }
+
+ @Test
+ public void givenInt_whenGetLongField_thenIllegalArgumentException() throws Exception {
+ Person person = new Person();
+ Field contactNumberField = person.getClass()
+ .getDeclaredField("contactNumber");
+ contactNumberField.setAccessible(true);
+
+ Assertions.assertThrows(IllegalArgumentException.class, () -> contactNumberField.getInt(person));
+ }
+
+ @Test
+ public void whenFieldNotSetAccessible_thenIllegalAccessException() throws Exception {
+ Person person = new Person();
+ Field nameField = person.getClass()
+ .getDeclaredField("name");
+
+ Assertions.assertThrows(IllegalAccessException.class, () -> nameField.get(person));
+ }
+
+ @Test
+ public void whenAccessingWrongProperty_thenNoSuchFieldException() throws Exception {
+ Person person = new Person();
+
+ Assertions.assertThrows(NoSuchFieldException.class, () -> person.getClass()
+ .getDeclaredField("firstName"));
+ }
+
+ @Test
+ public void whenAccessingNullProperty_thenNullPointerException() throws Exception {
+ Person person = new Person();
+
+ Assertions.assertThrows(NullPointerException.class, () -> person.getClass()
+ .getDeclaredField(null));
+ }
+
+}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 4757ddea72..34d6bf58a4 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -111,6 +111,7 @@
core-java-perf
core-java-reflection
+ core-java-reflection-2
core-java-security
core-java-security-2