Cargando...

this en Java

Escribe una clase Tin en Tin.java con un campo int llamado size y un constructor Tin(int size) que hace this.size = size;. En Lab.java, construye un tin con Tin t = new Tin(7); y luego imprime t.size. Compila ambos archivos y ejecuta java Lab. La pantalla debe mostrar una línea: 7. El parámetro y el campo comparten el nombre size. La palabra this nombra el campo del objeto para que el guardado llegue al lugar correcto. Usar this cuando los nombres chocan es lo que enseña esta página.

Por qué el mismo nombre necesita this

En la página de constructores el parámetro era n y el campo era size, así que size = n; quedaba claro. Aquí ambos nombres son size. Dentro del constructor, un size solo significa el parámetro. Escribir size = size; copia el parámetro sobre sí mismo y deja el campo en su valor por defecto. El campo del objeto aún necesita una escritura. Esa escritura usa this.size en el lado izquierdo.
Crea primero Tin.java. La línea public class es public class Tin. No dejes un nombre de clase antiguo Box o Cup aquí. Dentro de las llaves declara int size;. Luego escribe el constructor: Tin(int size) { this.size = size; }. En Tin.java no hay main. Guarda antes de compilar.
Lee la asignación una vez más. El lado derecho size es el valor que llegó al parámetro — aquí 7. El lado izquierdo this.size es el campo del objeto que se está construyendo. Tras la línea, el size de ese objeto guarda 7. Si quitas this. y dejas size = size;, la pantalla muestra después 0 porque el campo nunca cambió.

Tin with this in constructor

java
public class Tin {
    int size;

    Tin(int size) {
        this.size = size;
    }
}

Lab construye un tin

Crea Lab.java en la misma carpeta. Su línea public class es public class Lab. Dentro de main, escribe Tin t = new Tin(7); y luego System.out.println(t.size);. El argumento 7 pasa a ser el parámetro del constructor size. El constructor lo guarda con this.size = size;. No necesitas una línea aparte t.size = 7; en esta página.
Mantén Lab como la clase que guarda main. No pongas main dentro de Tin en esta lección. Si aún queda un archivo Hall de la página de constructores en la carpeta, no ejecutes java Hall en esta lección — ejecuta java Lab después de compilar Tin.java y Lab.java.

Lab builds one tin

java
public class Lab {
    public static void main(String[] args) {
        Tin t = new Tin(7);
        System.out.println(t.size);
    }
}

Desde la carpeta que guarda ambos archivos, ejecuta javac Tin.java Lab.java. Puedes compilar primero Tin.java y luego Lab.java cuando ambos estén completos. Cuando paréntesis, llaves y puntos y coma coinciden, javac no escribe una línea propia. Luego ejecuta java Lab — no java Lab.java ni java Tin. Quita el final .java del comando de ejecución. Arranca la clase que guarda main. Los mismos comandos funcionan en Windows y en macOS.
El programa debe imprimir una línea y parar: 7. No debe pedirte que escribas. Si la terminal espera teclado, aún queda una llamada nextLine de un ejercicio antiguo en un archivo. Bórrala y mantén new Tin(7) más la impresión en Lab, con this.size = size; en Tin.
Recorre la ejecución una vez. Java empieza en Lab.main. La expresión new Tin(7) construye un Tin y llama a Tin(int size) con el parámetro igual a 7. El cuerpo escribe this.size = size, así que el campo del objeto pasa a ser 7. Luego main imprime t.size y la pantalla muestra 7.
Si escribes size = size; en lugar de this.size = size;, el campo se queda en 0 para un int. La pantalla muestra entonces 0, no 7. Esa es la señal habitual de que falta this. Pon this. otra vez en el lado izquierdo de la asignación.

this.size y size lado a lado

Una tabla corta mantiene claros los dos nombres mientras estás dentro del constructor.

📊 this.size vs size

Nombre Qué significa en Tin(int size)
size solo el parámetro que entró al constructor
this.size el campo del objeto que se está construyendo
this.size = size; guardar el parámetro en el campo
size = size; no actualiza el campo
La tabla es solo un recordatorio. La línea tipada que mantienes es this.size = size; dentro del constructor, luego Tin t = new Tin(7); y System.out.println(t.size); en Lab.

Comparado con la página de constructores

En la página de constructores, Box(int n) { size = n; } funcionaba porque n y size eran palabras distintas. Esa forma sigue funcionando. Esta página usa a propósito la misma palabra dos veces para que necesites this. Una demo sobrante de Box y Hall con size = n; es otra lección. Para esta página mantén Tin y Lab y this.size = size;.
Imprimir t solo con System.out.println(t); no muestra un 7 limpio. Imprime t.size para ver el número guardado. La referencia al objeto sola no es el valor del campo.
En otros días aún puedes elegir un nombre de parámetro distinto. Esta lección elige a propósito nombres que coinciden. No mezcles n y this en la misma demo de Tin en esta página. Un camino claro basta: nombres que coinciden, this en el campo, impresión del campo.

Dos tins siguen separados

Cada new Tin(...) ejecuta el constructor otra vez para un objeto aparte. Puedes escribir Tin a = new Tin(2); y Tin b = new Tin(9);, luego imprimir ambos campos size. Cada llamada usa this.size = size; en su propio objeto. Los dos objetos no comparten un solo hueco size. No necesitas una segunda caja de código para esa comprobación — cambia los números en Lab una vez que ya viste 7, o mantén la demo de un solo tin como el archivo que guardas.
Si ambas líneas muestran 0, al constructor aún le falta this en el lado izquierdo. Si javac no encuentra Tin al compilar Lab.java, comprueba que Tin.java esté en la misma carpeta y que la línea de clase sea public class Tin.

Lo que queda para métodos de instancia

Esta página usa this solo dentro del constructor para guardar un campo. Una página posterior — métodos de instancia — muestra métodos que corren sobre un objeto y pueden leer o cambiar campos. Quédate aquí con el guardado en el constructor. No inventes métodos extra en Tin para esta lección a menos que ya los conozcas; el objetivo de la lección es this.size = size cuando los nombres coinciden.
Si Lab aún tiene Box b = new Box(4); de la demo de constructores y esta carpeta no tiene una clase Box que quieras conservar, quita esa línea. Mantén Tin t = new Tin(7); y System.out.println(t.size);. El compilador no inventará un Box por ti mientras enseñas Tin.
Cuando la carpeta aún guarda Box.java o Hall.java, déjalos o bórralos solo si confunden tu comando de compilación. Ejecuta java Lab después de compilar el par Tin y Lab de esta lección.

Antes de los métodos de instancia

Puedes declarar int size;, escribir Tin(int size) { this.size = size; } y construir con Tin t = new Tin(7); desde Lab. Compila ambos archivos y ejecuta java Lab. La pantalla muestra 7. La palabra this nombra el campo del objeto cuando el parámetro usa el mismo nombre. Pasaste el número al construir, el constructor lo guardó con this y la impresión demostró el guardado. La página siguiente son métodos de instancia, donde los métodos del objeto usan campos después de que el objeto ya existe.
Mantén la cabecera del constructor sin void. Mantén this. en el campo. Mantén la impresión en t.size. Esos tres hábitos son el punto de control de esta página antes de seguir.

🧠 Pon a Prueba tu Conocimiento

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

❓
6
Preguntas
🎯
70%
Para Aprobar
♾️
∞
Tiempo
🔄
∞
Intentos

📝 Instrucciones

  • Lee cada pregunta cuidadosamente
  • Selecciona la mejor respuesta para cada pregunta
  • Puedes repetir el quiz tantas veces como quieras
  • Tu progreso se mostrará en la parte superior