Preguntas para Entrevistas a Profesionales de Java

Blog

Java es el lenguaje de programación más utilizado en el mundo, y más de 3 millones de desarrolladores trabajan actualmente en la creación de aplicaciones y herramientas con este lenguaje de programación. En los últimos años, ha aumentado el número de preguntas que los programadores tienen en las entrevistas. Por eso tenemos varios artículos útiles sobre preguntas de Java en una entrevista.

Conseguir una entrevista es una tarea difícil, pero no es imposible. Aquí tienes algunas preguntas que te ayudarán a prepararte para la entrevista y a tener más éxito.

También te debería interesar conocer preguntas de entrevista de Java Senior: Senior Java Interview Questions

Pregunta 1. ¿Explica JVM, JRE y JDK?

  • JVM (Java Virtual Machine): JVM (Java Virtual Machine) actúa como un motor de tiempo de ejecución para ejecutar aplicaciones Java. La JVM es la que realmente llama al método principal presente en un código Java. La JVM forma parte del JRE (Java Runtime Environment).
  • JRE (Java Runtime Environment): JRE se refiere a un entorno de ejecución en el que se puede ejecutar el código de bytes de Java. Implementa la JVM (Java Virtual Machine) y proporciona todas las bibliotecas de clases y otros archivos de apoyo que la JVM utiliza en tiempo de ejecución. Así pues, JRE es un paquete de software que contiene lo necesario para ejecutar un programa Java. Básicamente, es una implementación de la JVM que existe físicamente.
  • JDK(Java Development Kit): Es la herramienta necesaria para compilar, documentar y empaquetar programas Java. El JDK incluye completamente el JRE, que contiene herramientas para los programadores de Java. El kit de desarrollo de Java (DJK) se proporciona de forma gratuita. Junto con JRE, incluye un intérprete/loader, un compilador (javac), un archivador (jar), un generador de documentación (javadoc) y otras herramientas necesarias en el desarrollo de Java. En resumen, contiene JRE + herramientas de desarrollo.

Pregunta 2. Explica public static void main(String args[]).

  • Public: Public es un modificador de acceso. Public significa que este método será accesible por cualquier clase.
  • static : Es una palabra clave en java que identifica que está basado en la clase, es decir, que se puede acceder a él sin crear la instancia de una clase. Como queremos que el método principal se ejecute sin ninguna instancia también, usamos static.
  • Void: Es el tipo de retorno del método. Void define el método que no devolverá ningún valor.
  • main: Es el primer método que ejecuta la JVM. La firma del método debe ser la misma.

Pregunta 3. ¿Por qué Java es independiente de la plataforma?

Independencia de la plataforma significa prácticamente “escribir una vez y ejecutar en cualquier lugar“. Java se denomina así por sus códigos de bytes que pueden ejecutarse en cualquier sistema, independientemente de su sistema operativo subyacente.

Pregunta 4. ¿Por qué Java no es orientado a objetos puro?

Java no se considera orientado a objetos puro porque soporta tipos de datos primitivos como boolean, byte, char, int, float, double, long, short.

Pregunta 5. Define clase y objeto. Explícalos con un ejemplo usando Java

Clase: Una clase es un prototipo definido por el usuario a partir del cual se crean los objetos. Representa el conjunto de propiedades o métodos que son comunes a todos los objetos de un tipo. En general, las declaraciones de clase pueden incluir estos componentes, en orden:

  • Superclase (si la hay): El nombre de la clase padre (superclase), si la hay, precedido de la palabra clave extends. Una clase sólo puede extender (subclasificar) un padre.
  • Interfaces: Una lista separada por comas de las interfaces implementadas por la clase, si las hay, precedida por la palabra clave implements. Una clase puede implementar más de una interfaz.

Objeto: Es una unidad básica de la programación orientada a objetos y representa las entidades de la vida real. Un programa típico de Java crea muchos objetos, que como sabes, interactúan invocando métodos. Un objeto se compone de:

  • Estado: Está representado por los atributos de un objeto. También refleja las propiedades de un objeto.
  • Comportamiento: Está representado por los métodos de un objeto. También refleja la respuesta de un objeto con otros objetos.
  • Identidad : Da un nombre único a un objeto y permite que un objeto interactúe con otros objetos.

Por ejemplo: Empleado es un ejemplo de clase

Un empleado concreto con una identificación única es un ejemplo de objeto.

class Empleado
{
   // Declaración de variables de instancia
   // Definición de métodos
}

Un objeto de empleado es un empleado específico:

Employee empObj = new Employee();

Uno de los objetos de Empleado es referido por ‘empObj

Pregunta 6. ¿Qué es un método? Proporciona varias firmas de los métodos

Un método Java es un conjunto de sentencias para realizar una tarea. Un método se coloca en una clase.

Firmas de los métodos: El nombre del método, el tipo de retorno y el número de parámetros componen la firma del método.

Un método puede tener los siguientes elementos en su firma:

  • Especificador de acceso: public, private, protected, etc. (No es obligatorio)
  • Modificador de acceso – static, synchronized, etc. (No es obligatorio)
  • Tipo de retorno – void, int, String, etc. (Obligatorio)
  • Nombre del método – show() (Obligatorio)
  • Con o sin parámetros – (int  número, String nombre); (el paréntesis es obligatorio)

Ejemplo:

class Prueba {
    void fun1() {}
    public double fun2(double x) {}
    public static void fun3() {}
    public static void fun4(String x) {}
}

Pregunta 7. Explica la diferencia entre una variable de instancia y una variable de clase

Una variable de instancia es una variable que tiene una copia por objeto/instancia. Esto significa que cada objeto tendrá una copia de la misma.

Una variable de clase es una variable que tiene una copia por clase. Las variables de clase no tendrán una copia en el objeto.

Ejemplo :

class Empleado {
    int nEmp;
    String nombreEmp, departamento;
    double salario;
    static int numeroTel;
}

El objeto referido por empObj1 se crea de la siguiente manera:

Empleado empObj1 = new Empleado();

Los objetos referidos por las variables de instancia empObj1 y empObj2 tienen copias separadas nEmp, nombreEmp, departamento y salario. Sin embargo, numeroTel pertenece a la clase (Variable de clase) y se puede acceder a él como Empleado.numeroTel.

Pregunta 8. ¿Qué clase es la superclase de todas las clases?

java.lang.Object es la clase raíz de todas las clases java y no necesitamos extenderla.

Pregunta 9.¿Qué son los constructores en Java?

En Java, el constructor se refiere a un bloque de código que se utiliza para inicializar un objeto. Debe tener el mismo nombre que el de la clase. Además, no tiene tipo de retorno y se llama automáticamente cuando se crea un objeto.

Si una clase no declara explícitamente ninguno, el compilador de Java proporciona automáticamente un constructor sin argumentos, también llamado constructor por defecto.

Este constructor por defecto llama al constructor sin argumentos del padre de la clase (ya que sólo contiene una declaración, es decir, super();), o al constructor de la clase Object si la clase no tiene otro padre (ya que la clase Object es un padre de todas las clases directa o indirectamente).

Hay dos tipos de constructores:

  • Constructor por defecto
  • Constructor parametrizado

Pregunta 10. ¿Cuáles son las diferentes formas de crear objetos en Java?

Hay muchas formas diferentes de crear objetos en Java. Por favor, revisa: Introducción a Objetos en Java

Pregunta 11. ¿Cuál es el propósito de los métodos estáticos y las variables estáticas?

Cuando se requiere compartir un método o una variable entre múltiples objetos de una clase en lugar de crear copias separadas para cada objeto, utilizamos la palabra clave static para hacer que un método o variable sea compartido por todos los objetos.

Variable estática: Las variables estáticas son también conocidas como variables de clase.

Estas variables se declaran de forma similar a las variables de instancia, la diferencia es que las variables estáticas se declaran utilizando la palabra clave static dentro de una clase fuera de cualquier constructor o bloque de método.

  • A diferencia de las variables de instancia, sólo podemos tener una copia de una variable estática por clase independientemente del número de objetos que creemos.
  • Las variables estáticas se crean al inicio de la ejecución del programa y se destruyen automáticamente al finalizar la ejecución.
  • Para acceder a las variables estáticas, no necesitamos crear un objeto de esa clase.

Métodos estáticos: Se puede acceder a un método estático sin necesidad de crear objetos. Sólo con el nombre de la clase se puede acceder al método. El método estático sólo puede acceder a variables estáticas y no a variables locales o globales no estáticas.

Por ejemplo:

public class StaticMethod {
  public static void printMe()
  {
    System.out.println("Acceso a métodos estáticos directamente por el nombre de la clase");
  }
}
public class MainClass {
  public static void main(String args[])
  {
    StaticMethod.printMe();
  }
}

Pregunta 12. ¿Por qué los métodos estáticos no pueden acceder a variables o métodos no estáticos?

Un método estático no puede acceder a variables o métodos no estáticos porque se puede acceder a los métodos estáticos sin instanciar la clase, por lo que si la clase no se instancia las variables no se inicializan y por lo tanto no se puede acceder desde un método estático

Pregunta 13.¿Qué es una clase estática?

Se puede decir que una clase es estática si todas las variables y métodos de la clase son estáticos y el constructor es privado. Hacer el constructor privado impedirá que la clase sea instanciada. Por lo tanto, la única posibilidad de acceder es utilizando únicamente el nombre de la clase.

Pregunta 14. ¿Cuántos tipos de Variable hay en Java? Explica

Hay tres tipos de variables en Java:

  • Variables locales
    Variables de instancia
    Variables estáticas

Variables Locales: Una variable definida dentro de un bloque o método o constructor se llama variable local.

  • Estas variables se crean cuando se entra en el bloque o se llama a la función y se destruyen después de salir del bloque o cuando la llamada vuelve de la función.
  • El alcance de estas variables existe sólo dentro del bloque en el que se declara la variable, es decir, podemos acceder a estas variables sólo dentro de ese bloque.
// Programa Java para demostrar las variables locales
public class LocalVariable
{
  public void getLocalVarValue()
  {
    // local variable age
    int localVar = 0;
    localVar = localVar + 11;
    System.out.println("Valor de la variable local" +
                " is: " + localVar);
  }
  public static void main(String args[])
  {
    LocalVariable obj = new LocalVariable();
    obj.getLocalVarValue();
  }
}

Salida:

Valor de la variable local es: 11

En el programa anterior la variable localVar es una variable local de la función getLocalVarValue(). Si utilizamos la variable localVar fuera de la función getLocalVarValue(), el compilador producirá un error como

“No se puede encontrar el símbolo localVar”.

Variables de instancia: Las variables de instancia son variables no estáticas y se declaran en una clase fuera de cualquier método, constructor o bloque.

  • Como las variables de instancia se declaran en una clase, estas variables se crean cuando se crea un objeto de la clase y se destruyen cuando el objeto se destruye.
  • A diferencia de las variables locales, podemos utilizar especificadores de acceso para las variables de instancia. Si no especificamos ningún especificador de acceso, se utilizará el especificador de acceso por defecto.
// Programa Java para demostrar las variables de instancia
public class InstanceVariable {
    int instanceVarId;
    String instanceVarName;
    public static void main(String args[])
    {
        InstanceVariable obj = new InstanceVariable();
        obj.instanceVarId = 0001;
        obj.instanceVarName = "InstanceVariable1";
        System.out.println("Mostrar el primer objeto:");
        System.out.println("instanceVarId==" + obj.instanceVarId);
        System.out.println("instanceVarName==" + obj.instanceVarName);
 
        InstanceVariable obj1 = new InstanceVariable();
        obj1.instanceVarId = 0002;
        obj1.instanceVarName = "InstanceVariable2";
        System.out.println("Mostrar el segundo objeto:");
        System.out.println("instanceVarId==" + obj1.instanceVarId);
        System.out.println("instanceVarName==" + obj1.instanceVarName);
    }
}

Salida:

Mostrar el primer objeto:
instanceVarId==1
instanceVarName==InstanceVariable1
Mostrando el segundo objeto:
instanceVarId==2
instanceVarName==InstanceVariable2

En el programa anterior las variables instanceVarId, instanceVarName son variables de instancia. En caso de que tengamos múltiples objetos como en el programa anterior, cada objeto tendrá sus propias copias de las variables de instancia. De la salida anterior se desprende que cada objeto tendrá su propia copia de la variable de instancia.

Variable estática: Las variables estáticas son también conocidas como variables de clase.

  • Estas variables se declaran de forma similar a las variables de instancia, la diferencia es que las variables estáticas se declaran utilizando la palabra clave static dentro de una clase fuera de cualquier constructor o bloque de método.
  • A diferencia de las variables de instancia, sólo podemos tener una copia de una variable estática por clase independientemente del número de objetos que creemos.
  • Las variables estáticas se crean al inicio de la ejecución del programa y se destruyen automáticamente al finalizar la ejecución.

Para acceder a las variables estáticas, no necesitamos crear un objeto de esa clase, simplemente podemos acceder a la variable como:

// Programa Java para demostrar las variables estáticas
public class StaticVar {
  private static int count = 0;
  private int nonStaticCount = 0;

  public void incrementCounter()
  {
    count++;
    nonStaticCount++;
  }
  public static int getStaticCount()
  {
    return count;
  }
  public int getNonStaticCount()
  {
    return nonStaticCount;
  }
  public static void main(String args[])
  {
    StaticVar stVarObj1 = new StaticVar();
    StaticVar stVarObj2 = new StaticVar();
    stVarObj1.incrementCounter();
    stVarObj2.incrementCounter();
    System.out.println("Static count for stVarObj1: " +
              stVarObj1.getStaticCount());
    System.out.println("NonStatic count for stVarObj1: " +
                stVarObj1.getNonStaticCount());
    System.out.println("Static count for stVarObj2: " +
                stVarObj2.getStaticCount());
    System.out.println("NonStatic count for stVarObj2: " +
                stVarObj2.getNonStaticCount());
  }
}

Salida:

Static count for stVarObj1: 2
NonStatic count for stVarObj1: 1
Static count for stVarObj2: 2
NonStatic count for stVarObj2: 1

En el programa anterior stVarObj1 y stVarObj2 comparten la misma instancia de la variable estática count, por lo que si el valor se incrementa en un objeto, el valor incrementado se reflejará para stVarObj1 y stVarObj2.

En estos días, hay más de un millón de desarrolladores de Java empleados en el mundo. Tanto si eres un principiante o un programador profesional, debes tomar nota de las preguntas de entrevista comunes que se hacen durante una entrevista de Java. ¡Más vale estar preparado!

Sobre el Autor:

Hey hola! Yo soy Alex Walton y tengo el placer de compartir conocimientos hacía ti sobre el tema de Programación en Java, desde cero, Online y Gratis.

3 comentarios

  1. Jaime

    excelente aporte y seccion, por favor añade mas preguntas o una nueva seccion de preguntas frecuentes

  2. Manuel

    Gracias amigo

Deja una Respuesta

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.