The last article I penned was on August 13, 2024. Since then, my priorities shifted. My focus turned towards turning my year-long relationship into a lifetime commitment. Despite challenges around caste and family expectations, I proudly crossed that finish line and married the love of my life on February 7, 2025.
Fast forward six months into married life, things feel beautifully grounded. With personal goals aligning, I’m now reigniting my learning journey with fresh energy and intention.
The Journey Before Diving into Java
After joining the backend team, my early tasks revolved around updating specific files—tweaking pom.xml, managing documentation, and handling minor CI/CD configurations. Post-marriage in March, I received my first real project: building an API for report generation and modifying PDF outputs. What seemed like a basic assignment felt monumental due to my limited understanding of Java fundamentals (yes, even printing “Hello World” felt alien at the time).
With the support of experienced teammates, I pushed through that challenge and that’s when I realized the need to truly grasp Java. I started a Udemy course to build that foundation. Though lengthy and time-consuming, it helped me absorb core concepts like syntax and class structure.
Soon came a more complex assignment: an API to extract massive Excel datasets—over 70 columns! —and store them in AWS S3. Frustrations flared, but they fueled my learning drive. I sought a mentor, and thankfully, I found one in-house. In our very first conversation, he diagnosed the gap and recommended a comprehensive tutorial from freeCodeCamp.org (link).
This article will walk through what I learned from that tutorial, capturing the fundamentals of Java along with some Java 8 features that solidified my understanding and confidence.
Tutorial topics
1. Classes, Methods & Access Modifiers
Explore Java’s building blocks: classes and methods, along with access modifiers like private, protected, and public—crucial for controlling visibility and structuring clean, modular code.
2. Packages, Imports & Constructors
Understand how packages organize code, how import statements bring external classes into scope, and how default constructors kickstart object creation behind the scenes.
3. IntelliJ IDEA, Maven & JUnit
Unleash developer efficiency using IntelliJ for coding, Maven for dependency management, and JUnit for writing robust, test-driven Java applications.
4. Control Flow: If-Else, Loops & Switch
Master decision-making and iteration with if-else, loops, and the flexible switch statement to handle multiple conditions cleanly.
5. Enums & Arrays
Define fixed sets of constants using enums and manipulate collections of data using arrays—laying the foundation for efficient logic handling.
6. Logging with SLF4J & Logback
Implement structured, customizable logging using SLF4J and Logback to monitor app behavior and diagnose issues effectively.
7. public static void main Explained
Dissect the iconic main method—Java’s launchpad—where execution begins and command-line arguments are welcomed in.
8. Checked vs. Unchecked Exceptions
Differentiate between checked exceptions that must be handled and unchecked ones that can occur at runtime, ensuring better error resilience.
9. Interfaces
Build flexible architecture with interfaces, allowing multiple classes to share contracts while maintaining implementation freedom.
10. Inheritance
Embrace reusability and hierarchy with inheritance, enabling classes to share and override behavior from parent types.
11. Data Types
Get familiar with primitive and reference types—an essential step for managing memory, performance, and behavior in Java.
12. The finalize Method
Take a look at Java’s legacy garbage-collection hook, finalize(), and understand why modern alternatives are now preferred.
13. hashCode() & equals()
Ensure object uniqueness and proper usage in collections by overriding hashCode() and equals() methods correctly.
14. Number Ranges & Autoboxing
Explore numeric boundaries and see how Java smartly converts primitives to objects (autoboxing) and back (unboxing) for convenience.
15. ArrayList
Manipulate dynamic arrays using ArrayList—a resizable, powerful structure backed by Java’s Collection framework.
I will cover all these topics in detail in upcoming articles.