Abstraction
Hide complexity behind a clean contract — when to use abstract classes vs. interfaces, default methods, and the design forces that govern the choice.
Hide complexity behind a clean contract — when to use abstract classes vs. interfaces, default methods, and the design forces that govern the choice.
Single and multi-dimensional arrays, creation, initialization, traversal, and the Arrays utility class.
Understand Java classes as blueprints and objects as runtime instances — fields, methods, constructors, and the `this` keyword.
if/else, switch expressions, for, while, do-while, break, continue — directing program execution in Java.
Hide internal state behind a controlled interface — access modifiers, getters/setters, and the art of designing immutable classes.
Extend classes with `extends`, override behavior with `@Override`, use `super` for parent delegation, and learn when inheritance causes more harm than good.
Method signatures, overloading, varargs, pass-by-value semantics, and recursion in Java.
Arithmetic, relational, logical, bitwise, ternary, and instanceof operators — how Java evaluates expressions.
Package structure, the import statement, the classpath, access modifiers, and how Java locates classes.
Compile-time (overloading) vs. runtime (overriding) dispatch — how Java decides which method to call and why this is the foundation of flexible design.
Java's concise immutable data carrier — understand what records generate automatically, compact constructors, and when records replace traditional value classes.
Restrict which classes can extend or implement a type — enabling exhaustive pattern matching and modeling closed, well-known type hierarchies safely.
String immutability, the string pool, StringBuilder, and the most useful String APIs in Java.
How Java converts values between types — widening, narrowing, implicit promotion, and explicit casting.
The 8 primitive types, reference types, literals, constants, and the final keyword in Java.