1. The Blueprint and the Buildings: Class vs Objects
A Class is merely the conceptual template written in source code. Objects are the tangible instances living in the Heap at runtime. A single architectural blueprint spawns thousands of autonomous houses.
Each instance encapsulates its own state. Mutating c2 has zero impact on c1 or c3 memory.
2. The 4-Step Lifecycle of new Operator
Persona p = new Persona("Ana", 28); executes in 4 distinct memory phases: Allocation, Zeroing, Constructor invocation, and Pointer assignment.
The new keyword requests continuous space in the Heap to accommodate Persona fields.
3. The this Pointer and Variable Shadowing
When a method parameter shares an identical identifier with a field ("nombre = nombre"), the local parameter shadows the field. The this keyword explicitly addresses the current receiving instance.
Without this, the parameter shadows the field. It copies itself into itself, leaving the instance field untouched.
4. References vs Copies: The Risk of Aliasing
In Java, object variables do NOT hold the object: they hold its memory reference. Writing Persona b = a; creates a second remote control aimed at the exact same Heap address.
Modifying the object via p2 immediately affects p1 since both reference the exact same memory block.