Pregunta Java: campos transient al serializar

2 min de lectura

Piensa la respuesta antes de abrirla. Todas las opciones parecen razonables, y casi siempre hay un detalle que lo cambia todo.

Pregunta Java · Serialización

¿Cuál es el resultado de compilar y ejecutar la clase Persona?

import java.io.*;
public class Persona implements Serializable {
    transient String nombre;
    transient int edad;
    String ocupacion;

    public Persona(String nombre, int edad, String ocupacion) {
        this.edad = edad;
        this.nombre = nombre;
        this.ocupacion = ocupacion;
    }
    public String toString() {
        return "Soy " + nombre + ", tengo " + edad + " años y soy " + ocupacion;
    }
    public static void main(String[] args) throws Exception {
        Persona antes = new Persona("Yo", 30, "programador");
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/dir/ejemplo.txt"));
        out.writeObject(antes);

        ObjectInputStream input = new ObjectInputStream(new FileInputStream("/dir/ejemplo.txt"));
        Persona despues = (Persona) input.readObject();
        System.out.println(despues);
    }
}
  1. Soy Yo, tengo 30 años y soy programador
  2. Soy Yo, tengo 30 años y soy null
  3. Soy null, tengo 0 años y soy programador
  4. Error de ejecución
Ver la respuesta

Respuesta: c.

java PersonaSoy null, tengo 0 años y soy programador

transient marca un campo para que no se guarde al serializar. Al leer el objeto, esos campos reciben su valor por omisión: null para nombre y 0 para edad. Solo ocupacion viaja en el archivo. Tampoco se ejecuta el constructor de Persona, que podría haberles dado otro valor.

Se usa para lo que no tiene sentido o no debe guardarse: contraseñas, cachés, conexiones abiertas. El enunciado original pedía «la clase Test», pero el código solo tiene la clase Persona. Para ejecutarlo creamos antes la carpeta /dir.

Pregunta publicada en 2014 y revisada en octubre de 2026. La respuesta se comprobó compilando y ejecutando el código con Java 25 LTS en un contenedor limpio; las salidas están copiadas de esa ejecución.

13 comentarios en «Pregunta Java: campos transient al serializar»

  1. Es la C por que cuando se construye el objeto "despues" de tipo Persona imprime valores que se encuentran nulos ya que en su constructor no se le paso ningun parametro….. el objeto que si recibe parametros es el de "antes" y ese no se mando a imprimir

    Responder

Deja un comentario