Every Java developer hits exceptions early. But the difference between checked and unchecked exceptions — and when to use which — trips people up for years. This post goes deep.
The Exception Hierarchy
#
Everything starts from Throwable:
Throwable ├── Error (unchecked — don't catch these) │ ├── OutOfMemoryError │ ├── StackOverflowError │ └── ... └── Exception (checked — must handle or declare) ├── IOException ├── SQLException ├── ... └── RuntimeException (unchecked — optional to handle) ├── NullPointerException ├── IllegalArgumentException ├── ArrayIndexOutOfBoundsException └── ...
The rule is simple:
Java 25 is here, and if you’re on Windows you have a few options for getting it running locally. This post walks through the full setup — from downloading the JDK to running your first program in the console.
Option 1: Download the JDK Directly
#
I’d recommend sticking with open-source JDK distributions. Here are the main options:
Every developer has a blog they keep meaning to start. This is mine.
I’ve been a backend engineer for a few years now, mostly working with Java and Spring Boot on large-scale systems. Along the way I’ve accumulated a lot of notes, debugging steps, architectural decisions, AWS gotchas, the occasional frontend struggle. Most of them live in handwritten notes, Notepad++, Obsidian, and the occasional PlantUML or Mermaid diagram. I’ve also shared some of these notes with colleagues on Teams, and sometimes on Slack.