Skip to content
Free public beta until December 4, 2026: every course is open, no card needed. After that, the first chapter of each course stays free and full access is a one-time $39 ($19 for up to 100 founding members chosen for helpful feedback). Your progress is kept. How the beta works

Glossary

Every defined term in this course, A–Z.

A file listing what Git should never track, such as build output.

@ConfigurationProperties

Read the section →

An annotation that binds every key under a prefix to a record's components, converting the values.

@RestController

Read the section →

A bean whose methods handle HTTP requests and whose return values become the response body.

@RestControllerAdvice

Read the section →

A bean whose @ExceptionHandler methods turn exceptions from every controller into responses.

absolute path

Read the section →

A full file address that starts at the top of the disk, such as /home/ada/notes.txt.

abstract class

Read the section →

A class marked abstract that can't be instantiated but can have fields, constructors and methods.

abstract method

Read the section →

A method declared with no body, ending in a semicolon, for subclasses to implement.

acceptance criterion

Read the section →

A concrete statement about the finished program that is either true or false, so a test can check it.

access modifier

Read the section →

private, protected or public (or nothing) in front of a member, saying which code may use it.

access token

Read the section →

A short-lived OAuth token, limited by scopes, sent as a bearer token.

A method that returns a field's value or something computed from the fields.

accidental duplication

Read the section →

Code that looks the same but expresses two different rules, which should not be merged.

accumulator

Read the section →

A variable that builds up a result as a loop runs.

Atomicity, consistency, isolation and durability, the four guarantees of a transaction.

A use of a class that makes the JVM initialize it, such as new or a static method call.

adapter pattern

Read the section →

A class that makes an object you can't change fit an interface your code expects.

aggregate function

Read the section →

A SQL function such as COUNT, SUM or AVG that turns many values into one.

A second variable referring to the same object.

A fixed list of permitted values in code, used for SQL parts that can't be placeholders.

A call that two overloads fit equally well

amending a commit

Read the section →

Replacing the last commit, to fix its message or add a forgotten file.

amortized constant time

Read the section →

Constant cost on average over many calls, even though an occasional call is expensive.

A marker such as @Test written before a declaration, read by tools.

anonymous class

Read the section →

A class with no name, declared and instantiated in one expression with new Interface() { ... }.

A file recording the classes an application loads and links (and, in Java 25, method profiles), so later runs start faster.

A class that wraps a web API so callers deal only in domain types.

A long random string identifying a calling program, issued by a provider.

API version

Read the section →

A new edition of an API for changes that would break existing clients.

One destination for log lines, such as the console or a file.

application context

Read the section →

Spring's container, which finds, creates, wires and holds the application's beans.

application image

Read the section →

The folder jpackage makes before any installer, with a native launcher, the app and a Java runtime.

application.properties

Read the section →

Spring Boot's settings file in src/main/resources.

A value written in a method call and copied into the matching parameter.

argument matcher

Read the section →

A Mockito stand-in for an argument value, such as any(), anyString() or eq("x").

argument source

Read the section →

An annotation such as @ValueSource, @CsvSource or @MethodSource that supplies a parameterized test's arguments.

arrange-act-assert

Read the section →

The three-part shape of a test, which builds the fixture, calls the behaviour, then checks the result.

A fixed-length, numbered row of values of one type.

array initializer

Read the section →

A list of values in braces that creates an array.

ArrayStoreException

Read the section →

The exception thrown when an array is given an element of the wrong type at run time.

The file a build produces for others to use, usually a JAR.

A check inside a test, such as assertEquals(expected, actual), that fails the test if it doesn't hold.

A Library of fluent assertions that start from assertThat(actual), an alternative to JUnit's Assertions.

associative operation

Read the section →

An operation that gives the same result however its inputs are grouped, as adding does and subtracting doesn't.

associativity

Read the section →

The order in which operators of equal precedence are grouped, such as left to right for - and +.

asynchronous request

Read the section →

A request that returns at once, leaving its result to arrive later.

atomic move

Read the section →

A rename that happens in one step, so nobody ever sees a half-finished file.

atomic variable

Read the section →

A one-value holder, such as AtomicInteger, whose updates happen in one indivisible step.

attaching a debugger

Read the section →

Connecting a debugger to a JVM that is already running.

authentication

Read the section →

Establishing who is calling.

authorization

Read the section →

Deciding what a known caller may do.

authorization code flow

Read the section →

The OAuth 2 flow where a user logs in at the authorization server and approves an app.

authorization server

Read the section →

The service that checks who you are and issues tokens.

auto-configuration

Read the section →

Spring Boot setting up beans by itself based on what is on the classpath.

Java wrapping a primitive in its wrapper object automatically, as when list.add(42) stores an Integer.

AutoCloseable

Read the section →

The interface with one method, close(), that every try-with-resources resource implements.

JDBC's default mode, in which every statement is committed on its own as soon as it succeeds.

automatic module

Read the section →

A plain JAR placed on the module path, given a module name and treated as a module.

A long-running program that listens on a port and answers requests from browsers, apps and other services.

The input a recursive method answers directly

A way of writing bytes as letters and digits, reversible by anyone.

Basic authentication

Read the section →

Sending a user name and password as Authorization Basic plus Base64.

An object that the Spring application context creates and manages.

A bean's identifier; for a scanned class, its simple name with a lower-case first letter.

bearer token

Read the section →

A token that lets in whoever holds it, sent as Authorization Bearer.

Big-O notation

Read the section →

A way of describing how an operation's work grows as the data grows, ignoring constant factors.

A standard-library class that stores decimal numbers exactly, used for money.

binary format

Read the section →

A data format written as bytes meant for programs, not people, such as PNG or Protocol Buffers.

Finding a fault by checking halfway and keeping the half that is wrong.

JMH's object for consuming a value so the JIT can't delete the work that produced it.

A pair of curly braces with statements inside, treated as one unit.

BlockingQueue

Read the section →

A thread-safe queue whose put waits while it is full and whose take waits while it is empty.

body handler

Read the section →

What turns a response body into a Java value, such as BodyHandlers.ofString().

body publisher

Read the section →

What supplies a request's body, such as BodyPublishers.ofString(json).

A pom listing a library family's parts at versions that work together.

The type with exactly two values, true and false.

Building and testing small helper methods first

bound method reference

Read the section →

A method reference like hello::concat whose receiver object is fixed when the reference is made.

bounded type parameter

Read the section →

A type parameter restricted to subtypes of something, such as T extends Comparable.

A named line of work in Git; a movable name for a commit.

branch coverage

Read the section →

The share of decision outcomes (each side of every if, loop condition, && and ?:) that the tests took.

A marker that makes the debugger pause the program on a chosen line.

broken access control

Read the section →

A server that doesn't check whether this user may perform this action on this resource.

One slot of a hash table, chosen by an element's hash code, holding the few elements that hash there.

A block of memory that holds data so it can move to or from the disk in large chunks.

build lifecycle

Read the section →

Maven's fixed, ordered list of build phases.

A program that compiles, tests, and packages a project, and downloads the libraries it needs.

builder pattern

Read the section →

A helper object that collects an object's values through named methods, then creates it with build().

byte stream

Read the section →

A java.io stream that moves raw bytes, one value from 0 to 255 at a time.

The compact instructions javac produces and the JVM runs.

bytecode verification

Read the section →

The JVM's check, before a class runs, that its bytecode can't misuse the operand stack, types or memory.

HotSpot's quick JIT compiler, which compiles methods fast and records a profile for C2.

HotSpot's optimising JIT compiler, which recompiles hot methods using their profile.

The last-in, first-out pile of frames for the calls in progress; only the top one runs.

A task with a result that may throw any exception, V call() throws Exception.

canonical constructor

Read the section →

A record's main constructor, taking every component in order.

canonicalization

Read the section →

Converting input to one standard form before checking it, then using that same form.

How many elements an ArrayList's internal array can hold before it must grow.

captured variable

Read the section →

A local variable from the surrounding method that a lambda uses; the lambda keeps a copy of its value.

carrier thread

Read the section →

A platform thread that a virtual thread is mounted on while it runs.

case-sensitive

Read the section →

Capital and small letters count as different.

A type name in brackets, such as (int), that converts a value and accepts any loss.

catch clause

Read the section →

The part of a try statement that handles one type of exception: catch (Type e) { ... }.

catch-or-declare rule

Read the section →

Java's compile-time rule that a checked exception a method can throw must be caught there or declared with throws.

certificate

Read the section →

A server's digital ID card for its host name, vouched for by a trusted authority.

certificate authority

Read the section →

An organization whose signature on a certificate clients trust.

The type for a single character, stored as a 16-bit number code.

character stream

Read the section →

A java.io stream that moves characters, decoding or encoding bytes with a charset.

characterization test

Read the section →

A test that records what code does today, so a refactoring that changes the result is caught.

The rule for turning characters into bytes and bytes back into characters.

check-then-act

Read the section →

Testing shared state and then acting on the answer, which another thread may make stale in between.

checked exception

Read the section →

An exception the compiler makes you catch or declare, such as IOException.

A linter that checks Java source against a configurable rule set such as naming and NeedBraces.

circular wait

Read the section →

Waiting that forms a cycle, A for B and B for A, the deadlock condition lock ordering removes.

The container Java organizes all code into; every method lives inside a class.

A file of compiled Java bytecode, ending in .class.

class initialization

Read the section →

The one-time running of a class's static field initializers and static blocks, on the class's first active use.

class invariant

Read the section →

A rule about an object's fields that holds whenever none of its methods is running.

class loader

Read the section →

The part of the JVM that finds a class's bytes and turns them into a Class object.

class loading

Read the section →

The JVM's process of finding a class file, checking it and setting the class up the first time it is needed.

The list of folders and JAR files where javac and java look for classes your code uses.

class path resource

Read the section →

A non-code file that ships with the program and is read through the class path.

class-file version

Read the section →

The version number stored in a compiled class, the Java release plus 44 (69 for Java 25).

ClassCastException

Read the section →

The exception thrown when a downcast names a class the object doesn't belong to.

client credentials flow

Read the section →

The OAuth 2 flow where a program gets a token as itself.

An object you ask for the current time, so tests can use a fixed one.

closed hierarchy

Read the section →

A family of types whose complete list of kinds is fixed and known to the compiler.

code completion

Read the section →

Suggestions the editor offers while you type, such as method names.

code coverage

Read the section →

A measure of which lines and branches of code ran while the tests ran.

code formatter

Read the section →

A tool that rewrites source code into one fixed layout without changing what it does.

A character's number in Unicode, such as U+1F600 for one emoji.

code review

Read the section →

Teammates reading a change before it is merged.

How closely everything inside one class or method belongs to the same job.

collaborator

Read the section →

An object a class uses to do its job, such as a catalog or a notifier.

An object that holds a group of other objects and grows or shrinks as they are added and removed.

collection view

Read the section →

A collection that looks through to another one, such as a map's keySet(), showing its current contents.

collections framework

Read the section →

The java.util interfaces and classes for lists, sets, queues and maps, designed to work together.

A ready-made recipe, from the class Collectors, that tells collect what to build from a stream's elements.

One named, typed field that every row of a table has.

One instruction typed into a terminal, such as java -version.

command-line argument

Read the section →

A word typed after the program's name when it is started, received in args.

A note for people in the source code, which the compiler ignores.

One saved snapshot of a project, with a message saying what changed.

commit message

Read the section →

The text saved with a commit: a short subject, and a body saying why.

common pool

Read the section →

The JVM-wide ForkJoinPool that async CompletableFuture methods use by default.

compact constructor

Read the section →

A record constructor written with no parameter list, used to check and tidy the values before they are stored.

compact object headers

Read the section →

A Java 25 JVM option that shrinks every object's header from 12 to 8 bytes.

compact source file

Read the section →

A Java file with just a main method and no class around it.

The interface whose compareTo method gives a type its natural order.

compareAndSet

Read the section →

Store a new value only if the current value is still the expected one, and say whether it worked.

compile-time constant

Read the section →

A final primitive or String variable with a constant initializer, whose value javac copies into every use.

compile-time error

Read the section →

A mistake the compiler finds before the program can run.

A tool that translates source code into a form that can run.

CompletableFuture

Read the section →

Java's future that steps can be attached to, and that join waits for.

CompletionException

Read the section →

The unchecked wrapper join throws when a future's work failed.

component scanning

Read the section →

Spring searching the application's package and those below it for classes marked @Component or a stereotype.

composition

Read the section →

Building a class from other objects held in its fields.

composition root

Read the section →

The one place, usually main, that creates the concrete objects and passes them to the objects that need them.

compound assignment

Read the section →

A shortcut such as total += 5, which updates a variable using its own value.

concrete class

Read the section →

A class that isn't abstract, so it can be instantiated.

concurrency

Read the section →

Several tasks in progress over the same period, whether or not any run at the same instant.

ConcurrentHashMap

Read the section →

A thread-safe map with atomic per-key operations such as merge and computeIfAbsent.

ConcurrentModificationException

Read the section →

The exception an iterator throws when its collection was changed by something other than the iterator.

conditional breakpoint

Read the section →

A breakpoint that pauses only when a condition you wrote is true.

confidence interval

Read the section →

The range a measurement's true average very likely lies in; JMH's Error column gives half its width.

configuration

Read the section →

Values a program reads at start-up from outside its code.

conflict markers

Read the section →

The <<<<<<<, ======= and >>>>>>> lines Git writes around a conflict.

connect timeout

Read the section →

How long a client may take to set up a connection before giving up.

One open session with a database, through which every statement is sent.

connection leak

Read the section →

A borrowed connection that is never closed, so it never goes back to the pool.

connection pool

Read the section →

A set of open database connections that code borrows and gives back instead of opening new ones.

connection timeout

Read the section →

How long a borrower waits for a free pooled connection before giving up.

A variable declared final, whose value can't be changed after it is first set.

constant folding

Read the section →

The compiler computing an expression on constants once, ahead of time, instead of every time it runs.

constant pool

Read the section →

The table inside a class file holding the names, strings and method references its bytecode uses.

constant time

Read the section →

Work that stays the same however many elements there are.

constant-time comparison

Read the section →

Comparing secret values in a time that doesn't depend on where they differ.

A rule on a table's data, such as NOT NULL, that the database enforces on every write.

constraint annotation

Read the section →

An annotation such as @NotBlank, @Size or @Positive that states a rule for one value.

constructor

Read the section →

Special code named after the class, with no return type, that sets up each new object.

constructor chaining

Read the section →

One constructor handing its work to another with this(...).

constructor expression

Read the section →

A JPQL select new ...(...) that builds records or other objects directly from query values.

constructor injection

Read the section →

Receiving dependencies as constructor parameters stored in final fields; the style this course uses.

constructor reference

Read the section →

A method reference like ArrayList::new that calls a constructor and returns the new object.

The JDK functional interface that takes a value and returns nothing, void accept(T t).

An isolated environment, run by Docker, in which one program such as a database runs.

continuous integration

Read the section →

A server that builds and tests every pushed branch automatically.

What a method needs from its callers (precondition) and promises in return (postcondition).

CopyOnWriteArrayList

Read the section →

A thread-safe list that copies itself on every write, for lists read often and changed rarely.

counts array

Read the section →

An array of tally counters indexed by value.

How much a change in one part of a program forces changes in another.

The array rule that a String[] is also an Object[].

covariant return

Read the section →

An override returning a subtype of the original's return type.

credentials

Read the section →

What a caller presents to prove who it is, such as a password or a token.

critical section

Read the section →

Code that only one thread at a time may be running, because it touches shared data.

Every row of one table paired with every row of another, usually a forgotten join condition.

Create, read, update and delete, the four basic operations on data.

A table saved as text, one row per line, commas between columns.

custom exception

Read the section →

An exception class you write, extending Exception (checked) or RuntimeException (unchecked).

The public catalogue number of a known vulnerability, such as CVE-2021-44228.

A 0-to-10 severity score for a vulnerability.

daemon thread

Read the section →

A background thread the JVM doesn't wait for when deciding whether to exit.

Two threads accessing one variable, at least one writing, with nothing ordering them.

data-transfer object

Read the section →

A plain record that carries data across an edge of the program, in the shape the outside format needs.

database management system

Read the section →

A program that stores data and answers other programs' requests for it.

database migration

Read the section →

A versioned SQL script that changes a database schema; production schemas change only through migrations.

database schema

Read the section →

The declared tables, columns, types and rules of a database.

The javax.sql interface for anything that hands out database connections.

DateTimeFormatter

Read the section →

The java.time object that turns dates into text and text into dates, using a pattern such as dd/MM/uuuu.

daylight saving time

Read the section →

Moving the clocks forward in spring and back in autumn, which skips one hour and repeats another.

dead-code elimination

Read the section →

The compiler removing a computation whose result is never used.

Threads each waiting for a lock another of them holds, so none can ever proceed.

A tool that pauses a running program so you can look inside it.

declared type

Read the section →

The type written in a variable's declaration; it decides which calls compile.

decomposition

Read the section →

Splitting a problem into smaller parts

decorator pattern

Read the section →

A wrapper with the same interface as the object it holds, adding behavior around each call.

deep reflection

Read the section →

Using reflection with setAccessible(true) to reach private fields, methods or constructors.

default constructor

Read the section →

The empty, no-argument constructor the compiler adds to a class that declares none.

default method

Read the section →

An interface method with a body, marked default, inherited by every implementing class.

default value

Read the section →

The starting value Java puts in each new array element.

defensive copy

Read the section →

A copy of a mutable object made on the way in or out of a class, so outside code can't change its internals.

A method passing its call straight on to an object the class holds.

deny by default

Read the section →

Refusing any action that no rule explicitly allows.

A check that lists forbidden values and accepts everything else.

deoptimization

Read the section →

The JVM discarding compiled code whose assumption has failed, and continuing in the interpreter.

Someone else's code your project uses, downloaded by the build tool.

dependency configuration

Read the section →

Gradle's name for a scope, such as implementation or testImplementation.

dependency exclusion

Read the section →

A rule that drops one transitive dependency from under one dependency.

dependency injection

Read the section →

Handing an object its collaborators from outside, usually through its constructor, instead of letting it create them.

dependency inversion principle

Read the section →

Business rules depend on an interface they own, and the low-level details implement it.

dependency mediation

Read the section →

How Maven picks one version when several are requested: nearest wins, then first declared.

dependency scope

Read the section →

Which class paths a dependency joins: compile, provided, runtime or test.

dependency tree

Read the section →

The tree of a project's dependencies and theirs, printed by mvn dependency:tree.

dependencyManagement

Read the section →

The pom section that sets versions without adding any dependency.

Marked as discouraged; still works, but the compiler warns, and it may be removed later.

A queue that can add, remove and inspect at both ends, usable as a queue or a stack.

derived query method

Read the section →

A repository method whose name, such as findByAuthorIgnoreCase, Spring Data turns into a query.

deserialization

Read the section →

Building objects back from stored or received bytes or text.

design pattern

Read the section →

A named, reusable shape of solution to a problem that keeps recurring in object-oriented code.

diamond operator

Read the section →

The empty angle brackets after new, which let the compiler fill in the type arguments.

diamond problem

Read the section →

Two unrelated interfaces supplying a default for the same method; the class must override it.

dirty checking

Read the section →

Hibernate noticing changed fields at commit and writing the UPDATE itself.

DispatcherServlet

Read the section →

The one servlet Spring MVC registers, which routes each request to a controller method.

The worldwide directory that turns host names into IP addresses.

A tool that runs programs in isolated, throwaway environments called containers, started from images.

documentation comment

Read the section →

A comment placed just before a class or method that tools turn into its documentation.

domain model

Read the section →

The types a program's own logic works with, strict about what values are allowed.

dominated case

Read the section →

A case that can never run because an earlier case matches everything it would.

A cast like (Circle) s from a supertype to a subtype, checked when it runs.

downstream collector

Read the section →

The collector groupingBy or partitioningBy applies to each group, such as counting or summingInt.

Don't repeat yourself: give each piece of knowledge, such as a rate or a rule, one place in the code.

A test double passed only to fill a parameter and never used.

An exact amount of time in seconds and nanoseconds, such as PT1H30M.

dynamic dispatch

Read the section →

Choosing which override runs from the object's class while the program runs.

effectively final

Read the section →

A local variable that is never reassigned after its first value, so a lambda may use it.

One value stored in an array.

embedded database

Read the section →

A database that runs inside the application's JVM, such as H2, with nothing to install.

empty string

Read the section →

A real String with zero characters, written "".

encapsulation

Read the section →

Keeping a class's fields private so other code can change them only through the class's own methods.

end-to-end test

Read the section →

A test that drives the whole running application from outside, as a user would.

One URL pattern together with one method, such as GET /v1/books/{id}.

enhanced for loop

Read the section →

A loop that visits every item of a group in order, written for (String word : args).

A thing that keeps its identity while its data changes, like a customer account.

EntityManager

Read the section →

The Jakarta Persistence object that saves, loads and queries entities.

A type whose only values are a fixed list of named constants.

enum constant

Read the section →

One named value of an enum, such as Speed.EXPRESS; Java creates exactly one object for it.

environment variable

Read the section →

A named setting the operating system hands to every program it starts.

Midnight UTC at the start of 1 January 1970, the moment Instant counts from.

equals/hashCode contract

Read the section →

Equal objects must have equal hash codes, and equals must be reflexive, symmetric, transitive, consistent and false for null.

Error class

Read the section →

The branch of Throwable for failures of the JVM itself, such as running out of memory or stack.

Error Prone

Read the section →

Google's javac plugin that reports bug patterns as compile errors or warnings.

escape analysis

Read the section →

The JIT's check of whether an object can be seen outside the method that creates it.

escape sequence

Read the section →

A backslash code such as \n or " that writes a character you can't type directly in quotes.

A format's rule for writing a value that contains the format's own special characters.

Evaluate Expression

Read the section →

A debugger command that runs a Java expression once, using the paused program's values.

Java's way of signalling that something went wrong while the program runs.

exception breakpoint

Read the section →

A debugger setting that pauses the program where an exception of a chosen type is thrown.

exception cause

Read the section →

The exception that led to this one, kept inside it when one exception is wrapped in another.

exception chaining

Read the section →

Catching an exception and throwing a new one that holds the first as its cause.

exception translation

Read the section →

Wrapping done at a boundary between layers, so each layer throws exceptions in its own terms.

ExceptionInInitializerError

Read the section →

The error thrown when a class's static initializer throws; its cause is the original exception.

execution sample

Read the section →

A JFR snapshot of the method and stack a thread was running at one moment.

ExecutionException

Read the section →

The checked exception Future.get throws when the task failed; the real exception is its cause.

ExecutorService

Read the section →

An object you hand tasks to, which runs them on threads it manages and returns Futures.

A switch is exhaustive when its cases cover every possible value of the selector.

expected value

Read the section →

The correct result a test compares the actual result against.

exponential backoff

Read the section →

Waiting longer before each retry, such as 1, 2, then 4 seconds.

A piece of code that produces a value, like 2 + 3.

The dot-and-letters ending of a file name, like .java.

factory object

Read the section →

Something passed into code, usually a Supplier, that creates new objects when that code needs them.

fail-fast iterator

Read the section →

An iterator that throws as soon as it notices its collection changed underneath it.

failing fast

Read the section →

Checking arguments as they arrive and refusing bad ones before changing anything.

failure analyzer

Read the section →

Spring Boot's start-up report that turns a wiring exception into a description and a suggested action.

fake object

Read the section →

A working, simplified implementation used in tests, such as an in-memory catalog backed by a HashMap.

fall-through

Read the section →

In the old colon form of switch, carrying on into the next case because no break stopped it.

fast-forward

Read the section →

A merge that only moves the branch's name forward; no new commit is made.

One JAR containing your classes and all their runtime dependencies.

feature release

Read the section →

A Java version that gets updates only until the next version, about six months.

A variable declared in a class's body; each object of the class has its own copy.

field initializer

Read the section →

A starting value written next to a field's declaration, such as int lives = 3.

field injection

Read the section →

The legacy style of putting @Autowired on fields, which leaves them null outside Spring.

The rule that the element waiting longest leaves first, as in a queue.

A folder together with everything inside it, at every level.

final class

Read the section →

A class that can't be extended, or with final on a method, one that can't be overridden.

final field

Read the section →

A field that must be assigned exactly once, by the end of every constructor, and never again.

finalization

Read the section →

The deprecated mechanism that ran an object's finalize() method before collecting it.

finally block

Read the section →

The block of a try statement that runs on every way out: normal end, caught or uncaught exception, or return.

A test that passes or fails from run to run without any code changing.

flame graph

Read the section →

A profiler chart of stacked bars where each bar is a method and its width is its share of samples.

The stream step that turns each element into a stream and joins those streams into one.

flexible constructor body

Read the section →

Java 25 lets a constructor run statements before this(...) or super(...), as long as they don't use the object.

flow scoping

Read the section →

A pattern variable is usable exactly where the compiler can prove the test succeeded.

To send whatever is waiting in a writer's buffer on to the file or stream it wraps.

A named container for files and other folders.

foreign key

Read the section →

A column whose value must match the primary key of a row in another table.

format specifier

Read the section →

A % code in a format string marking where and how a value goes.

format string

Read the section →

The text pattern given to printf, with blanks marked by % that values fill in.

fragile base class

Read the section →

A superclass change breaking subclasses because they depended on its internal self-calls.

The part of a URL after

fully qualified name

Read the section →

A class's package plus its simple name, such as com.example.greet.Greeting.

The JDK functional interface that turns one value into another, R apply(T t).

functional interface

Read the section →

An interface with exactly one abstract method, which a lambda can implement.

An object standing for a result that will exist later.

G1 collector

Read the section →

The JVM's default garbage collector since Java 9, balancing short pauses with throughput.

gadget chain

Read the section →

Ordinary methods in classes already on the class path, run in an order crafted bytes choose.

garbage collector

Read the section →

The part of the JVM that reclaims the memory of objects nothing can reach any more.

A starting point for the garbage collector's tracing, such as a running method's local variable or a static field.

generated key

Read the section →

The primary key value the database chose for a newly inserted row.

generational hypothesis

Read the section →

The observation that most objects become unreachable soon after they are created.

generic class

Read the section →

A class or record that declares type parameters, so one declaration works safely for many types.

generic method

Read the section →

A method that declares its own type parameter, before its return type.

generic type

Read the section →

A class or interface that takes type arguments, such as List or Map<K, V>.

A tool that records snapshots of your project so you can go back and see what changed.

A Git command that binary-searches the history for the commit that introduced a bug.

A copy of the repository on a server that a team shares.

Git repository

Read the section →

A project folder whose history Git keeps track of.

A fixed name for one commit, used to mark a release such as v1.0.0.

A file-name pattern such as *.txt, where * stands for any run of characters.

global variable

Read the section →

A mutable value reachable and changeable from anywhere, such as a public static non-final field.

google-java-format

Read the section →

A formatter with no options that applies the Google Java Style Guide (2-space indent, 100-column lines).

A Java build tool configured by a build.gradle.kts file.

Gradle task

Read the section →

One unit of Gradle work, such as compileJava, test or jar.

Gradle wrapper

Read the section →

Scripts that download and run the exact Gradle version a project names.

An extra yes-or-no test added to a pattern case with when.

guard clause

Read the section →

A check at the top of a method that returns early for an input the rest can't handle.

Code that deals with a thrown exception: the block of a matching catch clause.

happens-before

Read the section →

The Java Memory Model's guarantee that one action's effects are visible to another.

has-a relationship

Read the section →

The relationship composition expresses; a car has an engine.

An int summarizing an object, used by HashSet and HashMap to find it quickly.

Git's pointer to the branch you are on.

The first line of a data file, naming the columns.

The area of memory where objects live, independent of any method's frame.

heap pollution

Read the section →

A parameterized collection holding an element of the wrong type, slipped in through unchecked code.

hexagonal architecture

Read the section →

A design where the domain sits in the middle, declares interfaces (ports) for what it needs, and everything outside plugs in through adapters.

Hibernate ORM

Read the section →

The most widely used implementation of Jakarta Persistence.

A subclass static method (or field) with the same name as the superclass's; the declared type picks which.

The connection-pool library most Java applications, and Spring Boot by default, use.

A chart showing how often each value occurs.

A breakpoint setting that pauses only on the nth time a line is reached.

How many times the thread holding a reentrant lock has taken it and not yet released it.

A step in a template method with a default body that subclasses may override.

Any machine on a network, such as a laptop, a phone or a server.

A response header telling browsers to use only HTTPS for a host for a set time.

The request-response protocol web programs use to talk to each other.

HTTP header

Read the section →

One Name, colon, value line of facts about a request or response.

HTTP method

Read the section →

The verb of a request, such as GET, POST, PUT, PATCH or DELETE.

HTTP status code

Read the section →

The three-digit verdict on a request; its first digit is its class.

HTTP over QUIC, an encrypted transport on UDP; in HttpClient from JDK 26.

The JDK's built-in HTTP client, java.net.http.HttpClient.

HTTP sent inside an encrypted TLS connection.

An editor with built-in tools to write, run, and debug code.

idempotency key

Read the section →

A unique value sent with a POST so the server can recognise a retry.

Having the same effect on the server whether sent once or twice.

The name of a variable, method or class.

Being the very same object; what == compares for references.

identity value

Read the section →

The starting value of a reduce that changes nothing when combined, such as 0 for adding; also the result for an empty stream.

IllegalArgumentException

Read the section →

The JDK's exception for an argument a method or constructor can't accept.

IllegalStateException

Read the section →

The JDK's exception for an operation the object can't do in its current state, such as paying with a blocked card.

Can't be changed after it is created.

The keyword by which a class promises to supply an interface's methods.

import declaration

Read the section →

A line at the top of a file that lets the code use a class by its simple name.

Rearranging the original array instead of making a sorted copy.

InaccessibleObjectException

Read the section →

The exception setAccessible(true) throws when the target package isn't opened to the caller's module.

incremental build

Read the section →

A build that skips work whose inputs haven't changed since last time.

incubator module

Read the section →

An unfinished JDK API shipped in a jdk.incubator module so people can try it.

The position number of a character or element, counting from 0.

infinite loop

Read the section →

A loop whose condition never becomes false, so it runs until the program is stopped.

inheritance

Read the section →

A class getting the fields and methods of another class by extending it.

The JIT replacing a call with a copy of the called method's body.

inner class

Read the section →

A non-static class declared inside another; a class written under void main() in a compact file is one.

A join that keeps only rows that found a match in both tables.

insecure direct object reference

Read the section →

Returning or changing an object found by an id from the request, without checking who owns it.

insertion sort

Read the section →

A sort that inserts each element into a sorted left part.

An object made from a particular class; a Point object is an instance of Point.

instance field

Read the section →

An ordinary, non-static field, with one copy in each object.

instance method

Read the section →

A method without static, called on an object, that works on that object's fields.

An operator testing whether an object is of a class or one of its subclasses; false for null.

One exact moment on the timeline, the same everywhere, counted from the epoch.

Integer cache

Read the section →

The shared Integer objects for -128 to 127 that boxing reuses instead of allocating.

integer division

Read the section →

Division of two whole numbers that keeps only the whole part, so 7 / 2 is 3.

integer overflow

Read the section →

When a whole-number result doesn't fit its type and silently wraps around to the other end.

integration test

Read the section →

A test that checks real parts working together, such as code against a real database or real files.

A type listing methods that implementing classes promise to supply, with no per-object state.

interface segregation principle

Read the section →

No client should be forced to depend on methods it doesn't use.

intermediate operation

Read the section →

A stream step such as filter, map or sorted that returns a new stream and does no work until a terminal operation runs.

interpreter

Read the section →

The part of the JVM that runs bytecode one instruction at a time, before any of it is compiled.

InterruptedException

Read the section →

The checked exception a waiting thread gets when another thread interrupts it.

invalid state

Read the section →

A combination of values a type allows but the business never would.

The rule that List is not a List, even though Integer is a Number.

A promise that stays true at each step of an algorithm.

inversion of control

Read the section →

The framework calls your code, instead of your code calling the framework.

invokedynamic

Read the section →

A bytecode call whose target is set up at run time by a bootstrap method, used for string + and lambdas.

IOException

Read the section →

The checked exception family for failed input and output, such as a missing file.

The number other machines use to reach a host, such as 203.0.113.10.

is-a relationship

Read the section →

The relationship inheritance expresses; an hourly worker is an employee.

The international date and time format, such as 2026-11-01T14:30, that java.time prints and parses.

isolation level

Read the section →

How much concurrent transactions are shielded from each other's changes.

An object that walks through a collection one element at a time with hasNext and next.

The library most Java projects use to turn objects into JSON and back.

The usual Java code-coverage tool, run as a Maven plugin with prepare-agent and report goals.

A set of server-side Java specifications, such as Servlet, Persistence and Validation, formerly Java EE.

Jakarta Persistence

Read the section →

Java's standard ORM API, in the jakarta.persistence package.

Jakarta Validation

Read the section →

The specification for rules written as annotations; Hibernate Validator implements it.

A zip file of compiled classes and resources, with a manifest, that Java can run or use as a library.

Failures caused by duplicate or conflicting classes on the class path, such as two versions of one library.

JAR manifest

Read the section →

The file META-INF/MANIFEST.MF that describes a JAR, including its Main-Class.

java launcher

Read the section →

The java command that starts the JVM and runs a program.

Java Memory Model

Read the section →

The rules that say when one thread's writes are visible to another.

Java module

Read the section →

A named set of packages with a module-info.java saying which modules it requires and which packages it exports.

The official specification of the Java language and its standard library.

An environment variable that tells tools which JDK folder to use.

An older class shape with a public no-argument constructor and a get/set pair for every private field.

The Java compiler command; it turns .java files into .class files.

The JDK tool that prints what is inside a class file, including each method's bytecode with -c.

The JDK tool that sends diagnostic commands to a running JVM.

The JDK's command-line debugger.

Java's standard API, in java.sql, for talking to relational databases.

JDBC driver

Read the section →

The library that implements JDBC for one database, added as a dependency.

JDBC Statement

Read the section →

The JDBC object that sends a piece of SQL text to the database.

The text passed to getConnection that says which database to open, starting jdbc:.

Spring's thin layer over JDBC that binds parameters and maps rows while you write the SQL.

A JDK tool that lists uses of deprecated APIs in a JAR or class folder.

The JDK tool that reads class files and lists the modules and JARs they depend on.

The kit you install to write and run Java, with the compiler, the JVM, and tools.

JDK distribution

Read the section →

A packaged build of a JDK from a particular vendor, such as Temurin or Corretto.

JDK Flight Recorder

Read the section →

The profiler built into the JVM, which records events such as execution samples, GC pauses and JIT activity.

JDK Mission Control

Read the section →

A free graphical tool, downloaded separately, for reading JFR recordings.

The protocol every Java debugger uses to control a JVM.

A numbered document describing one JDK feature and the release that delivered it.

JIT compiler

Read the section →

The part of the JVM that turns frequently run bytecode into fast machine code while the program runs.

The OpenJDK tool for writing and running Java microbenchmarks correctly.

Combining rows of two tables that match on a condition, such as a key.

A JPQL clause that loads an association in the same query as its owner.

A table whose rows each pair one row of one table with one row of another.

The policy object that decides when a scope's join returns and what it returns.

A library that builds SQL from Java code generated from your schema, checked at compile time.

The JDK tool that packages an application with its own runtime as an app image or an installer.

Jakarta Persistence's query language, written with entity and field names instead of tables and columns.

An interactive tool where you type Java and see each result immediately.

A text format of objects, arrays, strings, numbers, true/false and null.

An expression such as .title or [0].id that picks a value out of a JSON body.

The Jackson object that converts between Java values and JSON text.

Java's standard testing library (Library); JUnit 6 uses the Jupiter API.

JUnit Platform

Read the section →

The part of JUnit that discovers test classes and launches a test engine to run them.

JUnit 6's API for writing tests (org.junit.jupiter.api), with @Test and Assertions.

The program that runs Java bytecode on your computer.

A signed token whose JSON claims anyone holding it can read.

Lower-case words joined by dashes, as in catalogue.max-loans.

A text field in a flat format that names which case of a sealed type a value is.

Keep it simple: choose the design with the fewest ideas for a reader to hold that meets today's needs.

known-answer test

Read the section →

A test whose expected value was worked out independently of the code.

The Kotlin-syntax language Gradle build files (build.gradle.kts) are written in.

lambda expression

Read the section →

Code like x -> x * 2 that implements a functional interface's one method in place.

lapsed listener

Read the section →

A listener that was never unsubscribed, kept alive in memory by the subject's list.

layered architecture

Read the section →

Splitting an application into controller, service and repository layers, with calls going one way down.

lazy evaluation

Read the section →

Not doing any work until a result is asked for; stream steps run only when the terminal operation pulls elements.

lazy loading

Read the section →

Loading an associated entity only when code first uses it.

leap of faith

Read the section →

Checking a recursive method by assuming the smaller call is correct and checking only the current step.

least privilege

Read the section →

Giving each account only the permissions its job needs.

A join that keeps every row of the first table, filling in NULL where nothing matched.

lifecycle method

Read the section →

A method JUnit calls around tests, such as @BeforeEach, @AfterEach, @BeforeAll or @AfterAll.

lifecycle phase

Read the section →

One named step of Maven's build, such as compile, test or package.

The time while the program runs during which a variable exists.

The rule that the most recently added element leaves first, as in a stack.

line coverage

Read the section →

The share of executable source lines that ran at least once during the tests.

linear time

Read the section →

Work that grows in proportion to the number of elements.

linked list

Read the section →

A chain of nodes, each holding one element and links to its neighbours.

A static-analysis tool that enforces style and simple rules on source code.

An ordered sequence of elements that, unlike an array, can have any length.

An object a subject calls when an event happens.

A value written directly in source code, such as 42, 2.5, 'A' or "Hi".

Threads that keep reacting to each other, such as retrying in step, so none makes progress.

local repository

Read the section →

Maven's cache of downloaded artifacts on your machine, ~/.m2/repository.

local variable

Read the section →

A variable declared inside a method (parameters included)

local variable array

Read the section →

The numbered slots in a frame that hold a method's parameters and local variables.

A language and region setting that decides how month and day names are written.

lock ordering

Read the section →

Taking locks in one agreed order everywhere, so no cycle of waiting can form.

How important a log message is, from TRACE up to ERROR.

The December 2021 flaw in log4j-core 2.0-beta9 to 2.14.1 that turned logged text into remote lookups.

logarithmic time

Read the section →

Work that grows by about one step each time the data doubles.

The library that writes SLF4J's log lines, configured by logback.xml.

An object a program sends messages to, each with a level, for the log.

logging facade

Read the section →

A small logging API that code calls, with the real logging library plugged in at run time.

logging policy

Read the section →

A project's rules for what goes in its log, at which level, and what is never logged.

logic error

Read the section →

A mistake that lets the program run but gives the wrong result.

A breakpoint that prints a message instead of pausing.

A counter for many writers and rare readers, which spreads updates and adds them up in sum().

loop variable

Read the section →

The counter a for loop is built around, such as i in for (int i = 0; i < 5; i++).

loopback address

Read the section →

The address that always means this same machine, 127.0.0.1 or ::1.

lost update

Read the section →

One change overwritten by another because both read the old value before either wrote.

A release that gets updates for years; Java 25 is the current one.

machine code

Read the section →

Instructions a particular processor can run directly.

made not entrant

Read the section →

PrintCompilation's note that a compiled version will no longer be used for new calls.

main method

Read the section →

The method where a Java program starts running.

main thread

Read the section →

The thread the JVM starts to run main; its name appears in "Exception in thread "main"".

man-in-the-middle

Read the section →

An attacker relaying traffic between two parties, reading or changing it.

many-to-many relationship

Read the section →

Many rows on each side can be linked to many on the other, like orders and products.

A collection of key-value pairs in which each key leads to one value.

One key together with its value inside a map.

Code that converts a DTO to domain types or back.

A Java build tool configured by a pom.xml file.

Maven Central

Read the section →

The public repository open-source Java libraries are published to.

Maven coordinates

Read the section →

The groupId, artifactId and version that identify a project or library.

Maven Failsafe

Read the section →

The Maven plugin that runs *IT integration tests after package and fails the build in the verify phase.

Maven plugin

Read the section →

An add-on that does Maven's actual work, such as compiling or running tests.

Maven property

Read the section →

A named value in a pom.xml, used elsewhere as ${name}.

Maven repository

Read the section →

A server or folder that stores artifacts in folders named by their coordinates.

maximum pool size

Read the section →

The most connections a pool will open at once.

measurement iteration

Read the section →

A JMH run of a benchmark whose timing is recorded and reported.

A two-part name for a kind of content, such as application/json.

memory leak

Read the section →

In Java: objects the program no longer needs that are still reachable, so they are never collected.

Bringing one branch's commits into another.

merge commit

Read the section →

A commit with two parents that joins two lines of work.

merge conflict

Read the section →

Two branches changed the same lines differently, so Git asks you to choose.

merge function

Read the section →

The function that tells toMap how to combine two values for the same key, such as Integer::sum.

A named group of instructions, such as main or println, that runs when it is called.

method body

Read the section →

The statements between a method's braces.

method call

Read the section →

Running a method by writing its name and arguments; the caller pauses until it returns.

method descriptor

Read the section →

The compact type signature in bytecode, such as (II)I for "takes two ints, returns an int".

method header

Read the section →

A method's first line: return type, name and parameter list.

method reference

Read the section →

Shorthand like String::toUpperCase for a lambda that only calls one method.

microbenchmark

Read the section →

A timing of one small piece of code, often a single method.

minimal failing case

Read the section →

The smallest input and program that still show a bug.

mock object

Read the section →

A test double that records how it was called, so the test can verify the interaction afterwards.

mock server

Read the section →

A small server, run by a test, that answers like the real API.

A Library that creates stubs and mocks at run time: mock, when(...).thenReturn(...), verify(...).

Spring's test tool that sends requests through Spring MVC without opening a network port.

modular JAR

Read the section →

A JAR with module-info.class at its root.

module descriptor

Read the section →

The module-info.java file at a module's root, compiled to module-info.class.

module import declaration

Read the section →

An import of every public type in every package a module exports, such as import module java.sql;.

module path

Read the section →

The list of folders and modular JARs where java and javac look for modules, given with -p.

Garbled text, such as café for café, from decoding bytes with the wrong charset.

The lock built into every Java object, used by synchronized.

multi-catch

Read the section →

One catch clause for several unrelated exception types: catch (A | B e).

multi-module project

Read the section →

One Maven build made of several projects, listed as modules in a parent pom.

Can be changed after it is created.

mutation testing

Read the section →

Making small deliberate changes to code and rerunning the tests; a change no test notices marks weak testing.

A method whose job is to assign one field, such as setName.

A library that maps hand-written SQL statements, kept in XML or annotations, to objects.

N+1 problem

Read the section →

One query for a list, then one more query per item to load an association.

named parameter

Read the section →

A value placeholder in JPQL written as :name and filled with setParameter.

The floating-point value meaning "not a number", such as the result of 0.0 / 0.0.

narrowing conversion

Read the section →

A conversion to a smaller type, which may lose information and needs a cast.

natural key

Read the section →

A primary key taken from the data itself, such as an ISBN.

natural order

Read the section →

The default order compareTo defines.

nested pattern

Read the section →

A pattern inside another pattern, such as a record pattern for a component that is itself a record.

NoClassDefFoundError

Read the section →

The error thrown when running code needs a class the JVM can't provide.

Something a project has decided not to do in this version, written down next to its goals.

The modifier that reopens one branch of a sealed hierarchy so any class may extend it.

normalization

Read the section →

Designing tables so that each fact is stored in exactly one place.

The value of a reference that points at no object.

NullPointerException

Read the section →

The run-time error thrown when code calls a method on a null reference.

NumberFormatException

Read the section →

The run-time error thrown when text can't be parsed as a number.

numeric promotion

Read the section →

The rule that converts both operands of an arithmetic operator to a common type first.

The common way to give programs short-lived, limited tokens instead of passwords.

A value with its own data and methods, kept in memory and reached through a reference.

The class at the top of every hierarchy, source of toString, equals and hashCode.

object header

Read the section →

The JVM's own bookkeeping at the start of every object, 12 bytes on a typical 64-bit JVM.

object-relational mapper

Read the section →

A library that maps classes to tables and writes the SQL to load and save objects.

observer pattern

Read the section →

A subject keeps a list of listeners and tells each one when something happens.

off-by-one error

Read the section →

A loop that runs one pass too many or one too few.

How far a local clock is ahead of or behind UTC at some moment, such as +02:00.

old generation

Read the section →

The part of the heap for objects that have survived several young collections; collected far less often.

on-demand import

Read the section →

An import of every public type in one package, such as import java.util.*;.

on-stack replacement

Read the section →

Switching a running loop from the interpreter to compiled code partway through.

one-to-many relationship

Read the section →

One row in one table is linked to many rows in another, like a customer and their orders.

one-to-one relationship

Read the section →

Each row on one side is linked to at most one row on the other.

open option

Read the section →

A setting such as APPEND or CREATE_NEW that says how a write treats an existing file.

open-closed principle

Read the section →

Adding a new kind should mean adding code, not editing code that already works.

The open-source project that produces the code for nearly every JDK.

OpenRewrite

Read the section →

An open-source tool that applies automated migration recipes to code as a reviewable diff.

opens directive

Read the section →

A module-info line that allows deep reflection into a package at run time, without exporting it.

operand stack

Read the section →

The per-call stack where bytecode instructions take their inputs and leave their results.

A box that holds one value or is empty, returned when a result may be missing.

optional dependency

Read the section →

A library's dependency marked optional, which its users don't get unless they declare it.

OutOfMemoryError

Read the section →

The error thrown when the JVM can't allocate an object because the heap is full of reachable objects.

overloading

Read the section →

Declaring several methods with one name and different parameter lists.

Writing a method with the same signature as an inherited one, so yours is used instead.

A named group of classes kept in one folder, declared with a package line at the top of each file.

package declaration

Read the section →

The package line that must be the first statement of a file, naming the package its types belong to.

package-private

Read the section →

The access a member gets with no modifier, usable by any class in the same package.

Parallel collector

Read the section →

A throughput-oriented garbage collector, for batch work where longer pauses don't matter.

parallelism

Read the section →

Several tasks executing at the same instant, which needs several processor cores.

A variable declared in a method's header that receives an argument's value when the method is called.

parameterized message

Read the section →

A log message written with {} gaps, filled only if it is written.

parameterized test

Read the section →

One test method that JUnit runs once per set of arguments, each run reported separately.

parent delegation

Read the section →

The rule that a class loader asks its parent for a class before searching its own locations.

A pom other poms inherit settings from.

Reading text such as "42" to produce the number it describes.

pass-by-value

Read the section →

Java's only way of passing arguments: each argument's value (a number, or a reference) is copied into the parameter.

password hash

Read the section →

The one-way, slow, salted value a server stores instead of a password.

The address of a file or folder, written as folder names separated by slashes.

The list of folders a terminal searches to find a command.

path traversal

Read the section →

Untrusted text in a file path, such as ../, reaching files outside the intended folder.

path variable (URL)

Read the section →

A {name} part of a mapped URL path, bound to a method parameter with @PathVariable.

pattern matching

Read the section →

Choosing what to do by testing what kind of value you have, and naming it in the same step.

pattern variable

Read the section →

The name introduced by a type pattern, such as c in s instanceof Circle c.

A password hashing function built into the JDK.

The rule for choosing wildcards - producer extends, consumer super.

percent-encoding

Read the section →

Writing a character a URL can't hold as % and two hex digits per UTF-8 byte.

An amount of calendar time in years, months and days, such as P1Y2M3D.

The list after a sealed type's name of every type allowed to extend or implement it.

persistence context

Read the section →

The set of entities an EntityManager has loaded or saved, one object per row.

persistence unit

Read the section →

The named set of entity classes and connection settings in persistence.xml.

A virtual thread that can't leave its carrier while it waits, holding the carrier like a platform thread.

placeholder

Read the section →

A ? in a prepared statement's SQL where a value will be supplied.

platform thread

Read the section →

A Java thread backed one-to-one by an operating-system thread.

plugin goal

Read the section →

One task a plugin can perform, written prefix:goal, such as surefire:test.

poison pill

Read the section →

An agreed end marker a producer puts into a queue to tell a consumer to stop.

polymorphic type handling

Read the section →

Letting JSON say which subclass to build.

polymorphism

Read the section →

One call written once behaving differently for different kinds of object.

Maven's build file, pom.xml, describing one project.

A number from 0 to 65535 that picks one program on a host.

postcondition

Read the section →

What a method guarantees afterwards

Which operator is applied first when several appear together, such as * before +.

precedence order

Read the section →

The fixed order in which a program looks for a setting; the first source that has it wins.

precondition

Read the section →

What must be true when a method is called; meeting it is the caller's job.

The JDK functional interface for a yes-or-no test on one value, boolean test(T t).

PreparedStatement

Read the section →

A JDBC statement with ? placeholders whose values are sent separately from the SQL.

pretty printing

Read the section →

Writing JSON over several indented lines so people can read it.

preview feature

Read the section →

A finished but not yet final Java feature, usable only with --enable-preview.

primary key

Read the section →

The column whose value is unique in every row and never NULL, used to name the row.

primitive specialization

Read the section →

A functional interface or stream for plain int, long or double values, such as IntPredicate, that avoids boxing.

primitive stream

Read the section →

A stream of plain int, long or double values, such as IntStream, with sum, average, max and min.

primitive type

Read the section →

One of Java's eight built-in value types, such as int or double, held directly in the variable.

priority queue

Read the section →

A queue whose head is always its smallest element, whatever order elements arrived in.

problem details

Read the section →

RFC 9457's standard JSON shape for error bodies.

A running program, with memory of its own that other programs can't touch.

producer-consumer

Read the section →

Threads that make work handing it through a queue to threads that do it.

A named set of settings, such as dev or prod, loaded from application-.properties when active.

A tool that watches a running program and reports where its time and memory go.

A set of instructions a computer can carry out.

programming language

Read the section →

A precise notation for writing instructions a computer can follow.

programming to an interface

Read the section →

Declaring variables and parameters with interface types, naming a class only in new.

A folder of source files plus the settings that say how to build them.

propagation

Read the section →

An exception passing from a method that doesn't handle it to that method's caller.

properties file

Read the section →

A text file of name=value settings that Java reads into a Properties object.

property source

Read the section →

One place Spring Boot reads settings from; for each key the highest-precedence source wins.

A set of rules two programs agree on for what the bytes they exchange mean.

The generated subclass Spring hands out in place of a bean, to add behaviour such as transactions around calls.

Program steps written in plain English

public interface

Read the section →

The public constructors and methods other code may rely on; everything private is implementation.

pull request

Read the section →

A request on GitHub or GitLab to merge a branch, with its diff, checks and review.

quadratic time

Read the section →

Work that grows with the square of the number of elements, typically a loop over everything inside another.

qualified export

Read the section →

An export to named modules only, written exports p to m1, m2;.

A SELECT statement, which reads data and returns a result set without changing anything.

query string

Read the section →

The name=value pairs after the ? in a URL.

race condition

Read the section →

A bug where a program's result depends on how the scheduler happens to interleave its threads.

ragged array

Read the section →

A 2D array whose rows have different lengths.

A generic type used without type arguments, such as List instead of List.

Maven's build of all modules of a multi-module project, in dependency order.

read-modify-write

Read the section →

Reading a shared value, computing from it, and writing the result back, such as count++.

reason phrase

Read the section →

The words after a status code, such as OK, meant only for people.

Replaying a branch's commits on top of another branch, giving a straight history.

A class declared by listing its components; Java writes the fields, constructor, accessors, equals, hashCode and toString.

record component

Read the section →

One of the values a record holds, listed in brackets in its header.

record pattern

Read the section →

A pattern such as Rect(var w, var h) that matches a record type and binds its components.

recursive case

Read the section →

The path where a recursive method calls itself on a smaller input.

recursive method

Read the section →

A method that calls itself on a smaller input.

Combining all the elements of a stream into one value, as reduce, sum and count do.

A lock's property that the thread holding it can take it again without blocking.

ReentrantLock

Read the section →

A lock as an object, used as lock(); try { ... } finally { unlock(); }, with tryLock and timeouts.

refactoring

Read the section →

Changing code's structure without changing what it does.

What a String (or other object) variable holds, pointing at an object stored elsewhere.

reference type

Read the section →

Any type that isn't primitive, such as String; its variables hold a reference to an object.

refresh token

Read the section →

A credential an app swaps for new access tokens without a new login.

A bug in behaviour that used to work, introduced by a later change.

regular expression

Read the section →

A small pattern language for matching text, used by split.

reifiable type

Read the section →

A type whose full information exists at run time, such as String[] or List<?>.

relational database

Read the section →

A database that keeps data in tables that refer to each other by key values.

relative path

Read the section →

A short file address, such as notes.txt, that Java finishes off with the working directory.

relaxed binding

Read the section →

Spring Boot matching one key in several spellings, such as CATALOGUE_MAXLOANS for catalogue.max-loans.

remainder operator

Read the section →

The % operator, which gives what is left over after integer division.

A tool that reads what you type, runs it, and prints the result, over and over.

repository (data access)

Read the section →

The bean, usually behind an interface, that stores and finds the application's data.

repository manager

Read the section →

A company server, such as Nexus or Artifactory, that mirrors Maven Central and hosts private libraries.

representation

Read the section →

A description of a resource's current state, usually written in JSON.

request line

Read the section →

The first line of an HTTP request, such as GET /greeting HTTP/1.1.

request timeout

Read the section →

How long one request may wait for its response.

requires transitive

Read the section →

A requires that also passes the read on to every module that requires this one.

The helper, usually run by the OS or the local network, that answers DNS lookups.

An object that holds something outside the program, such as an open file, and must be closed after use.

resource (REST)

Read the section →

A thing an API offers, such as a book, with its own URL.

resource filtering

Read the section →

Maven replacing ${...} placeholders in resource files as it copies them.

ResponseEntity

Read the section →

A return type holding a status, headers and a body, used to choose the response's status code.

The conventions most web APIs follow, with resources as nouns and methods as verbs.

restricted header

Read the section →

A header HttpClient sets itself and refuses to let code set, such as Host.

The table of rows a query returns.

The JDBC cursor over a query's rows, read one row at a time with next().

To throw a caught exception again, unchanged, with throw e; inside a catch block.

Describes a failure that may go away if the same request is sent again later.

return statement

Read the section →

return expression; ends the method and hands back the value; return; ends a void method.

return type

Read the section →

The type of value a method hands back

return value

Read the section →

The value a method hands back to its caller; the call takes that value.

Discarding every change made in the current transaction.

The first exception in a chain: the last Caused by section of a stack trace.

One thing stored in a table, with one value for each column.

Visiting a grid row by row.

run configuration

Read the section →

An IDE's saved recipe for how to start your program.

Run to Cursor

Read the section →

Run until the line the cursor is on, as a breakpoint used once.

run-time error

Read the section →

A problem that stops a program while it is running.

The functional interface for a job with no input and no result: void run().

runnable JAR

Read the section →

A JAR whose manifest names a Main-Class, so java -jar can start it.

runtime image

Read the section →

A self-contained Java runtime folder, made by jlink, with only the modules a program needs.

runtime type

Read the section →

The class an object was created from with new; it decides which override runs.

RuntimeException

Read the section →

The branch of Exception for failures that usually mean the calling code made a mistake; all of it is unchecked.

safe method

Read the section →

A method that only reads and asks for no change on the server, like GET.

Random bytes mixed into a password before hashing, stored next to the hash.

A machine-readable list of every component and version in a build.

scalar replacement

Read the section →

Keeping a non-escaping object's fields in registers instead of allocating the object.

schema evolution

Read the section →

Handling a saved format whose fields change between versions of a program.

The part of a program where a variable's name can be used.

scope (OAuth)

Read the section →

A named permission a token carries, such as books:read.

ScopedValue

Read the section →

A value bound for exactly one call and everything it calls, readable without a parameter.

A provider's ready-made client library for its API.

A class or interface that names every type allowed to extend or implement it.

A setting that grants access, such as a password or an API key.

secret manager

Read the section →

A service that stores secrets encrypted, controls and logs access, and can rotate them.

secret rotation

Read the section →

Replacing a secret with a new value and retiring the old one.

SecureRandom

Read the section →

The JDK's unpredictable random generator, for tokens, ids, salts and keys.

Security Manager

Read the section →

An old in-process sandbox for Java code, permanently disabled since Java 24.

The starting number that fixes a random sequence.

semantic versioning

Read the section →

Version numbers MAJOR.MINOR.PATCH, where the part that changes says what kind of change it is.

A set of permits that limits how many threads use a resource at once.

sentinel value

Read the section →

A special input that means no more data, like typing 0 to finish a list.

separation of concerns

Read the section →

Putting each kind of decision, such as input, rules and output, in its own part of the code.

sequenced collection

Read the section →

A collection with a defined first and last element, offering getFirst, getLast and reversed.

Serial collector

Read the section →

A single-threaded garbage collector for small heaps, chosen automatically on very small machines.

serialization

Read the section →

Turning objects into bytes or text that can be saved or sent.

serialization filter

Read the section →

A check on each class in a Java serialization stream before it is created.

serialVersionUID

Read the section →

A version-number field that serializable classes, including every exception class, are expected to declare.

service layer

Read the section →

The beans that hold an application's rules and use cases, in plain Java with no HTTP types.

servlet container

Read the section →

The server part, such as Tomcat, that accepts connections, reads HTTP requests and runs them on threads.

session fixation

Read the section →

An attack where an id planted before login becomes the victim's logged-in session.

A random, unguessable key the server maps to a logged-in user, sent in a cookie.

A collection that never holds two equal elements.

A parameter or local with the same name as a field hides the field; this.name reaches the field.

shallow copy

Read the section →

A copy that shares the objects inside the original.

shallowly immutable

Read the section →

Having final fields that can't be reassigned, while the objects they refer to can still change.

short-circuit evaluation

Read the section →

The rule that && and || skip their right side when the left side already decides the answer.

short-circuiting operation

Read the section →

A stream step such as limit, findFirst or anyMatch that can stop pulling elements once it has its answer.

side effect

Read the section →

Anything a method does besides computing its return value

A method's name plus its parameter types in order; return type and parameter names are not part of it.

single responsibility principle

Read the section →

A class should have one reason to change, meaning one source of change requests.

single-type import

Read the section →

An import of one named type, such as import java.util.List;.

singleton scope

Read the section →

Spring's default of one instance of a bean per context, shared by every caller and thread.

The logging API most Java projects call.

SNAPSHOT version

Read the section →

A version ending in -SNAPSHOT, meaning work in progress that may change.

One end of a network connection, as a program sees it.

socket address

Read the section →

An IP address together with a port, naming one listening program.

Five design principles for classes and interfaces, one per letter.

source code

Read the section →

The human-readable text of a program, written in a programming language.

source launcher

Read the section →

Running a .java file directly with java File.java, with no separate compile step.

split package

Read the section →

One package whose classes are spread over two or more JARs.

A tool that analyses compiled bytecode for known bug patterns such as RV_RETURN_VALUE_IGNORED.

A build plugin that runs a code formatter: spotless:check reports violations, spotless:apply fixes them.

Spring Boot

Read the section →

Spring with defaults decided, starters, auto-configuration and an embedded Tomcat, so an app is one runnable JAR.

Spring Data JPA

Read the section →

Spring's module that implements repository interfaces extending JpaRepository at start-up.

Spring Initializr

Read the section →

The website and service that generates a new Spring Boot project as a zip.

Spring Security

Read the section →

The Spring framework module that authenticates requests and enforces access rules.

The language programs use to query and change a relational database.

SQL injection

Read the section →

An attack where typed text is pasted into SQL and changes what the statement does.

SQL's marker for a missing or unknown value in a column.

A five-character standard error code an SQLException may carry, such as 23505.

SQLException

Read the section →

The checked exception every JDBC method can throw when the database reports an error.

A relational database that is a library keeping the whole database in one file, with no server.

stack frame

Read the section →

The memory for one call in progress: its parameters, locals and where to return to.

stack trace

Read the section →

The report Java prints when an exception isn't handled, showing where it happened.

StackOverflowError

Read the section →

Thrown when the call stack has no room for another frame

standard directory layout

Read the section →

The folders every Maven and Gradle project uses, such as src/main/java and src/test/java.

standard error

Read the section →

A program's second output stream, for error reports; the JVM prints uncaught stack traces there.

standard input

Read the section →

The stream of characters a program reads, normally from the keyboard.

standard library

Read the section →

The ready-made code that comes with every JDK, such as String and the collections.

A Spring Boot dependency with no code of its own that brings a tested set of libraries for one job.

A thread that never gets a resource because others keep winning it.

The current values of an object's fields.

Each request carries everything the server needs, credentials included.

One complete instruction, usually ending in a semicolon.

static analysis

Read the section →

Examining code without running it, looking for rule violations and patterns that indicate bugs.

static factory method

Read the section →

A static method that creates and returns an object, like a constructor with a name.

static field

Read the section →

A field that belongs to the class, with one copy shared by every object.

static import

Read the section →

An import of a static member, so code can write max(3, 8) instead of Math.max(3, 8).

static initializer

Read the section →

Code in a class's static { ... } block, or a static field's initializer, run once when the class is initialized.

static method

Read the section →

A method that belongs to the class, is called through the class name, and has no this.

status line

Read the section →

The first line of an HTTP response, such as HTTP/1.1 200 OK.

Debugger commands that run the program one line or one method at a time.

stepwise refinement

Read the section →

Designing a program by turning plain-English steps into method calls

stereotype annotation

Read the section →

@Component or a specialisation of it (@Service, @Repository, @Controller, @RestController) that makes a class a bean and names its layer.

stop-the-world pause

Read the section →

A moment when the garbage collector stops all of the program's threads to do part of its work.

strategy pattern

Read the section →

Putting one interchangeable algorithm behind an interface so it can be swapped at run time.

A sequence of elements flowing through a chain of operations; it stores nothing and never changes its source.

stream pipeline

Read the section →

A source, zero or more intermediate operations, and one terminal operation.

strict resolving

Read the section →

A formatter setting that rejects impossible dates such as 31 April instead of moving them.

string pool

Read the section →

The shared store that lets equal string literals be one object.

strong encapsulation

Read the section →

The module rule that public types in a package the module doesn't export can't be used from other modules.

structured concurrency

Read the section →

Concurrency where subtasks start, fail and finish as one unit inside a scope.

StructuredTaskScope

Read the section →

Java 25's preview API for forking subtasks on virtual threads and joining them as one unit.

A method with its real header and a placeholder body that just compiles.

The class that extends another, as Hourly extends Employee.

substitution principle

Read the section →

Code written for a superclass must keep working, every promise kept, with any subclass object.

A piece of work forked inside a StructuredTaskScope, on its own virtual thread.

super(...) runs a superclass constructor; super.m() runs the superclass's version of m.

Maven's built-in default pom that every pom inherits from.

The class being extended; every class without extends has Object as its superclass.

The JDK functional interface that takes nothing and returns a value, T get().

suppressed exception

Read the section →

An exception thrown while closing a resource after the try block had already thrown, kept inside the first exception.

The Maven plugin that runs unit tests in the test phase.

surrogate key

Read the section →

A primary key with no meaning outside the database, usually a number it generates.

surrogate pair

Read the section →

Two chars that together store one character beyond 65,535, such as most emoji.

swallowing an exception

Read the section →

Catching an exception and carrying on as if nothing happened, with no report and no correct recovery.

switch expression

Read the section →

A switch that produces a value, so it can be stored or printed.

synchronized block

Read the section →

Code that holds an object's monitor while it runs, so only one thread at a time can be inside.

synchronous request

Read the section →

A request whose caller waits on that line until the response has arrived.

system property

Read the section →

A setting given to the JVM on the command line with -Dname=value.

A grid of rows and named columns holding one kind of thing in a relational database.

table alias

Read the section →

A short name for a table in a query, such as c for customers.

target type

Read the section →

The functional interface type a lambda or method reference is assigned or passed to.

The protocol that gives two programs a reliable, ordered, two-way stream of bytes.

telescoping constructors

Read the section →

A chain of constructors, each adding one more optional parameter, whose calls nobody can read.

template method

Read the section →

A final method that fixes an algorithm's steps and leaves some steps to subclasses.

A window where you type commands for the computer to run.

terminal operation

Read the section →

The last step of a stream pipeline, such as toList or count, which runs the pipeline and ends the stream.

One input together with its expected result.

test double

Read the section →

Any object that stands in for a real collaborator during a test.

A test that ended with an unexpected exception, which Surefire counts separately from a failed assertion.

test fixture

Read the section →

The known starting state a test builds before acting, often in a @BeforeEach method.

test independence

Read the section →

Each test sets up what it needs and leaves nothing behind, so it gives the same result alone or in any order.

test instance lifecycle

Read the section →

JUnit's default of creating a new test-class object for every test method.

test pyramid

Read the section →

Guidance for a test suite's mix, with many unit tests, fewer integration tests and few end-to-end tests.

A Spring test that starts only one layer, such as @WebMvcTest for one controller.

A test double that wraps a real object, letting calls through while recording them.

A test double that answers calls with canned values and records nothing.

All of a project's automated tests, run together by one command.

test-driven development

Read the section →

Writing a failing test before the code (red), then just enough code to pass (green), then tidying (refactor).

Testcontainers

Read the section →

A Library that starts throwaway Docker containers, such as a real PostgreSQL, for tests.

A multi-line string literal written between triple quotes.

Inside a constructor or instance method, a reference to the object being built or worked on.

One path of execution inside a process, with its own call stack, sharing the process's heap.

thread confinement

Read the section →

Keeping data reachable from one thread only, so it can't race.

thread dump

Read the section →

A list of every thread in a running JVM with its state, stack and locks.

thread interruption

Read the section →

One thread's request that another stop, made with interrupt() and signalled by a flag.

thread pool

Read the section →

A fixed set of reusable threads that take tasks from a queue.

thread scheduler

Read the section →

The part of the operating system that decides which thread runs next, and for how long.

thread state

Read the section →

Where a thread is in its life, from NEW to TERMINATED, as getState() reports.

thread-safe

Read the section →

Behaving correctly when used by many threads at once, with no extra care from the callers.

ThreadLocal

Read the section →

A variable with a separate value for each thread, which lives until removed.

throw statement

Read the section →

The statement throw expression; which throws an exception object, usually one made on the spot with new.

The superclass of everything Java can throw: every Error and every Exception.

throws clause

Read the section →

The part of a method header that lists checked exceptions it may let escape: void load() throws IOException.

tiered compilation

Read the section →

HotSpot's scheme of running each method interpreted first, then C1-compiled, then C2-compiled as it gets hotter.

A region's rules for which offset from UTC its clocks use, and when that changes.

The rules that encrypt a connection and prove the server's identity.

One piece of input with no whitespace in it, such as a word or a number.

The small difference within which two computed doubles are treated as equal.

top-level class

Read the section →

A class declared directly in a file, not inside another class.

top-level handler

Read the section →

The outermost catch in a program, such as in main, which reports any failure once and decides whether to continue.

transaction

Read the section →

A group of database changes that is saved all together or not at all.

transitive dependency

Read the section →

A library your project gets because one of its dependencies needs it.

Visiting every element of an array once.

trust boundary

Read the section →

The line where data from a source you don't control enters code that acts on it.

trust store

Read the section →

The set of root certificates a client trusts, the JDK's lib/security/cacerts by default.

The block after try that holds statements which might throw.

try-with-resources

Read the section →

A try statement that declares resources in brackets and closes each one automatically, on every path.

two-dimensional array

Read the section →

An array of rows, each row an array.

The kind of value something holds, such as int, double or String, which decides what you can do with it.

type argument

Read the section →

The actual type written in angle brackets when a generic type is used, such as String in List.

type erasure

Read the section →

The compiler removing type arguments after checking them, so generic types don't exist at run time.

type inference

Read the section →

The compiler working out type arguments from a call's arguments or the type it is assigned to.

type parameter

Read the section →

A placeholder for a type, declared in angle brackets, such as the T in class Box.

type pattern

Read the section →

A case such as case Integer i that matches any value of that type and names it.

TypeReference

Read the section →

A small Jackson helper that carries a full generic type, such as List, to readValue.

UML class diagram

Read the section →

A box sketch of a class with its name, fields and methods, marked - for private and + for public.

unbound method reference

Read the section →

A method reference like String::length whose receiver is the first parameter passed in.

Java taking the primitive value out of a wrapper object automatically, as in int x = list.get(0).

unchecked exception

Read the section →

An exception the compiler doesn't make you catch or declare: a RuntimeException or an Error.

unchecked warning

Read the section →

A compiler warning that it couldn't check a generic type, as with a raw type or a cast to List.

UncheckedIOException

Read the section →

An unchecked exception that wraps an IOException, for places a checked one isn't allowed, such as inside a lambda.

uncommon trap

Read the section →

A check C2 plants where it chose not to compile a path; taking that path deoptimizes the method.

The worldwide standard that gives every character a number.

Code that runs one method with chosen inputs and compares the result with the expected value.

unmodifiable collection

Read the section →

A collection whose elements can be read but not added, removed or replaced.

unmodifiable list

Read the section →

A list whose elements can be read but never added, removed or replaced.

unnamed module

Read the section →

The module that everything on the class path belongs to.

unnamed pattern

Read the section →

The underscore _, which matches anything in a pattern and names nothing.

unreachable

Read the section →

Of an object: no chain of references from a live variable reaches it, so the garbage collector may reclaim it.

untrusted input

Read the section →

Data that came from outside your control, such as requests, uploads, partner APIs or user-written rows.

Abandoning stack frames one by one as an exception propagates, running finally blocks on the way.

Treating a subclass object as its superclass type; always safe and needs no syntax.

The general name for an identifier like a URL; Java's networking APIs take a java.net.URI.

A web address saying where a resource is and how to reach it.

One requirement told from the user's side: who wants it, what they want, and why.

The world's reference clock; other zones are a number of hours ahead of it or behind it.

The charset that stores every Unicode character in one to four bytes; Java's default since Java 18.

utility class

Read the section →

A class of only static methods and constants, like Math, with a private constructor.

value object

Read the section →

An object identified only by its data, so two with the same data are interchangeable.

A way to declare a local variable and let the compiler work out its fixed type from the first value.

A last parameter written Type... name that accepts any number of arguments as an array.

A named storage place that holds one value of a fixed type.

version conflict

Read the section →

Two parts of the dependency graph asking for different versions of one library.

virtual thread

Read the section →

A cheap thread managed by the JVM that frees its carrier while it waits.

Whether one thread's write is guaranteed to be seen by another thread's read.

A free, separately downloaded tool that attaches to running JVMs to monitor and profile them.

A field modifier that makes every read see the latest write, without making ++ atomic.

walking skeleton

Read the section →

The thinnest version of a program that runs end to end through every layer.

The period after a Java program starts when its code is still interpreted or partly compiled, so it runs slower.

warm-up iteration

Read the section →

A JMH run of a benchmark whose timing is thrown away, so the code is compiled before measurement starts.

watch expression

Read the section →

An expression the debugger shows again at every pause.

web framework

Read the section →

A ready-made program that routes HTTP requests to your methods and converts their inputs and results.

Invisible characters such as spaces, tabs and line breaks.

widening conversion

Read the section →

An automatic conversion to a type that can hold the value's range, such as int to double.

A ? in a type argument, meaning some type within limits, such as List<? extends Number>.

withX method

Read the section →

A method that returns a copy of an immutable object with one value changed.

work factor

Read the section →

The adjustable cost (iterations, cost or memory) that makes each password guess slow.

working directory

Read the section →

The folder a terminal is "in" right now.

wrapper class

Read the section →

A class whose objects hold one primitive value, such as Integer for int or Double for double.

Don't build options or abstractions for needs nobody has asked for yet.

young generation

Read the section →

The part of the heap where new objects are allocated and collected often.

A garbage collector that keeps pauses under a millisecond by doing nearly all its work concurrently.

ZonedDateTime

Read the section →

A date and wall-clock time together with a time zone, which pins down one moment.