Preguntas y respuestas de entrevista de Java principal pueden ayudarte a prepararte para entrevistas basadas en Java. Ya seas un recién graduado o un profesional altamente experimentado, Java principal juega un papel vital en cualquier entrevista de Java/JEE.
Java principal es el área favorita en la mayoría de las entrevistas y desempeña un papel crucial en decidir el resultado de tu entrevista.
Esta publicación proviene directamente de mis 14+ años de programación en Java y mucha experiencia en entrevistas. Java 16 se ha lanzado recientemente y he actualizado la publicación para incluir algunas preguntas de las versiones más recientes.
Preguntas y respuestas de entrevista de Java principal
I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.
- Preguntas de entrevista de Java String
- Preguntas de entrevista de Java Thread
- Preguntas de entrevista de Java Collections
- Preguntas de entrevista de Java Exception
Aquí estoy proporcionando algunas de las preguntas importantes de entrevista de Java Core con respuestas que deberías conocer. Puedes marcar esta publicación para repasar tu conocimiento antes de dirigirte a una entrevista.
1. ¿Nombra algunas características importantes de la versión Java 14?
Java 14 fue lanzado el 17 de marzo de 2020. Es una versión No-LTS. Algunas de las características específicas para desarrolladores de Java 14 son: Características de Java 14:
- Expresiones Switch – JEP 361
- Mejoras en la coincidencia de patrones del operador instanceof – Función de vista previa, JEP 305
- Mensajes de NullPointerException útiles – JEP 358
- Bloques de texto – Segunda vista previa, JEP 368
- Records – clase de datos, función de vista previa, JEP 359.
2. ¿Nombra algunas características importantes de la versión Java 13?
Java 13 fue lanzado el 17 de septiembre de 2019. Es una versión No-LTS. Algunas de las características específicas para desarrolladores de Java 13 son: Características de Java 13:
- Bloques de texto – Función de vista previa, JEP 355
- Cambios en Switch Expressions – Función de vista previa, JEP 354
- Reimplementación de la API de Sockets de Java – JEP 353
- Archivo CDS Dinámico – JEP 350
- Método FileSystems.newFileSystem()
- Fábricas DOM y SAX con soporte de espacios de nombres
- Soporte Unicode 12.1
- Mejoras en ZGC para devolver memoria no utilizada – JEP 351
3. ¿Nombre algunas características importantes de la versión Java 12?
Java 12 se lanzó el 19 de marzo de 2019. Es una versión no LTS. Algunas de las Características de Java 12 son:
- Cambios en la JVM – JEP 189, JEP 346, JEP 344 y JEP 230.
- Switch Expressions
- Método mismatch() de archivos
- Formato compacto de números
- Colectores Teeing en la API de Streams
- Nuevos métodos en la clase String
- JEP 334: API de constantes de la JVM
- JEP 305: Coincidencia de patrones para instanceof
- Las literales de cadena sin procesar se eliminan de JDK 12.
4. ¿Cuáles son las características importantes del lanzamiento de Java 11?
Java 11 es la segunda versión LTS después de Java 8. Han cambiado el modelo de licencia y soporte, lo que significa que si descargas el Oracle JDK de Java 11, será de pago para uso comercial. Si deseas utilizar una versión gratuita, puedes descargarla desde el sitio web de OpenJDK.
Algunas de las características importantes de Java 11 son:
- Podemos ejecutar un programa Java directamente a través del comando
java
. El archivo fuente será compilado e ejecutado implícitamente. Es parte de la implementación de la característica JEP 330. - Se agregaron 6 nuevos métodos a la clase String: isBlank(), lines(), strip(), stripLeading(), stripTrailing() y repeat(). Puedes leer más sobre ellos en nuestro artículo sobre la clase String de Java.
- La clase Files tiene dos nuevos métodos para leer/escribir datos de cadena: readString() y writeString().
- Podemos usar “var” con las expresiones lambda también. Es parte de la implementación JEP 323.
- Epsilon: Un recolector de basura No-Op para entornos de prueba. Es una característica experimental y parte de JEP 318.
- Los módulos Java EE y CORBA han sido eliminados de la construcción estándar del JDK. El motor JavaScript Nashorn también ha sido marcado como obsoleto.
- Nuevo Cliente HTTP (JEP 321) y Grabador de Vuelo (JEP 328)
Para obtener una visión completa, por favor lee Características de Java 11.
5. ¿Cuáles son las características importantes de la versión Java 10?
Java 10 es el primer lanzamiento cada seis meses de Oracle corporation, por lo que no es un lanzamiento importante como las versiones anteriores. Sin embargo, algunas de las características importantes de Java 10 son:
- Inferencia de Tipo de Variable Local
- Mejora en java.util.Locale y APIs relacionadas para implementar extensiones adicionales de Unicode de etiquetas de idioma BCP 47.
- Habilita al HotSpot VM para asignar el montón de objetos Java en un dispositivo de memoria alternativo, como un NV-DIMM, especificado por el usuario.
- Proporciona un conjunto predeterminado de certificados de Autoridad de Certificación (CA) raíz en el JDK.
Java 10 es principalmente un lanzamiento de mantenimiento, sin embargo, realmente me gustó la característica de inferencia de tipo de variable local. Para obtener una visión detallada de Java 10, por favor revisa Características de Java 10.
6. ¿Cuáles son las características importantes de la versión Java 9?
Java 9 fue un lanzamiento importante y trajo muchas características. Algunas de las características importantes son:
- Java 9 REPL (JShell)
- El Sistema de Módulos de Java 9
- Métodos de fábrica para Listas, Conjuntos, Mapas e Map.Entry inmutables
- Métodos privados en Interfaces
- Flujos Reactivos
- Mejoras en el Recolector de Basura (GC)
Encontrarás más detalles sobre ellos en Características de Java 9.
7. ¿Cuáles son las características importantes de la versión Java 8?
Java 8 fue lanzado en marzo de 2014, por lo que es uno de los temas candentes en las preguntas de entrevistas de Java. Si respondes esta pregunta claramente, mostrará que te gusta mantenerte actualizado con las últimas tecnologías.
Java 8 ha sido uno de los mayores lanzamientos después de las anotaciones y genéricos de Java 5. Algunas de las características importantes de Java 8 son:
- Cambios de interfaz con métodos predeterminados y estáticos
- Interfaces funcionales y expresiones Lambda
- API de transmisión de Java para clases de colección
- API de fecha y hora de Java
I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.
8. ¿Nombra algunos conceptos de OOP en Java?
Java se basa en conceptos de Programación Orientada a Objetos, a continuación se muestran algunos de los conceptos de OOP implementados en la programación Java.
- Abstracción
- Encapsulación
- Polimorfismo
- Herencia
- Asociación
- Agregación
- Composición
Lee más sobre ellos en Conceptos de OOP en Java.
9. ¿Qué se entiende por independencia de plataforma de Java?
La independencia de plataforma significa que puedes ejecutar el mismo programa Java en cualquier sistema operativo. Por ejemplo, puedes escribir un programa Java en Windows y ejecutarlo en macOS.
10. ¿Qué es JVM y es independiente de la plataforma?
La Máquina Virtual de Java (JVM) es el corazón del lenguaje de programación Java. La JVM es responsable de convertir el código de bytes en código legible por la máquina. La JVM no es independiente de la plataforma, por eso hay diferentes JVM para diferentes sistemas operativos. Podemos personalizar la JVM con Opciones de Java, como asignar memoria mínima y máxima a la JVM. Se llama virtual porque proporciona una interfaz que no depende del sistema operativo subyacente.
11. ¿Cuál es la diferencia entre JDK y JVM?
El Kit de Desarrollo de Java (JDK) es para propósitos de desarrollo y la JVM es una parte de él para ejecutar los programas Java.
El JDK proporciona todas las herramientas, ejecutables y binarios necesarios para compilar, depurar y ejecutar un programa Java. La parte de ejecución es manejada por la JVM para proporcionar independencia de máquina.
12. ¿Cuál es la diferencia entre JVM y JRE?
El Entorno de Ejecución de Java (JRE) es la implementación de la JVM. El JRE consta de la JVM y los binarios de Java y otras clases para ejecutar cualquier programa con éxito. El JRE no contiene herramientas de desarrollo como el compilador de Java, el depurador, etc. Si deseas ejecutar algún programa Java, debes tener instalado el JRE.
13. ¿Cuál clase es la superclase de todas las clases?
La clase java.lang.Object
es la clase raíz para todas las clases de Java y no necesitamos extenderla.
14. ¿Por qué Java no soporta herencias múltiples?
Java no admite la herencia múltiple en clases debido al “Problema del Diamante”. Para obtener más información sobre el problema del diamante con un ejemplo, lee Herencia Múltiple en Java.
Sin embargo, la herencia múltiple sí está admitida en interfaces. Una interfaz puede extender múltiples interfaces porque simplemente declaran los métodos y la implementación estará presente en la clase que las implementa. Por lo tanto, no hay problema del diamante con las interfaces.
15. ¿Por qué Java no es un lenguaje puramente orientado a objetos?
Java no se considera un lenguaje puramente orientado a objetos porque admite tipos primitivos como int, byte, short, long, etc. Creo que esto simplifica el lenguaje al escribir nuestro código. Java podría tener objetos envoltorios para los tipos primitivos, pero solo para la representación, no habrían proporcionado ningún beneficio.
Como sabemos, para todos los tipos primitivos tenemos clases envoltorios como Integer, Long, etc., que proporcionan algunos métodos adicionales.
16. ¿Cuál es la diferencia entre las variables de ruta y de clase (classpath)?
PATH es una variable de entorno utilizada por el sistema operativo para localizar los ejecutables. Es por eso que cuando instalamos Java o queremos que cualquier ejecutable sea encontrado por el sistema operativo, necesitamos agregar la ubicación del directorio en la variable PATH. Si trabajas en el sistema operativo Windows, lee esta publicación para aprender cómo configurar la variable PATH en Windows.
Classpath es específico de Java y utilizado por los ejecutables de Java para localizar archivos de clase. Podemos proporcionar la ubicación del classpath al ejecutar la aplicación Java y puede ser un directorio, archivos ZIP, archivos JAR, etc.
17. ¿Cuál es la importancia del método main en Java?
El método main() es el punto de entrada de cualquier aplicación independiente de Java. La sintaxis del método main es public static void main(String args[])
.
El método main de Java es público y estático para que el tiempo de ejecución de Java pueda acceder a él sin inicializar la clase. El parámetro de entrada es una matriz de cadenas a través de la cual podemos pasar argumentos de tiempo de ejecución al programa Java. Consulta esta publicación para aprender cómo compilar y ejecutar un programa Java.
18. ¿Qué es la sobrecarga y la anulación en Java?
Cuando tenemos más de un método con el mismo nombre en una sola clase pero los argumentos son diferentes, entonces se llama sobrecarga de método.
El concepto de anulación entra en juego con la herencia cuando tenemos dos métodos con la misma firma, uno en la clase padre y otro en la clase hija. Podemos usar la anotación @Override en el método anulado de la clase hija para asegurarnos de que si se cambia el método de la clase padre, también se cambie en la clase hija.
19. ¿Podemos sobrecargar el método main()?
Sí, podemos tener múltiples métodos con el nombre “main” en una sola clase. Sin embargo, si ejecutamos la clase, el entorno de ejecución de Java buscará el método main con la sintaxis public static void main(String args[])
.
20. ¿Podemos tener múltiples clases públicas en un archivo fuente de Java?
No podemos tener más de una clase pública en un solo archivo fuente de Java. Un solo archivo fuente puede tener múltiples clases que no son públicas.
21. ¿Qué es un paquete Java y qué paquete se importa por defecto?
Un paquete Java es el mecanismo para organizar las clases Java agrupándolas. La lógica de agrupación puede basarse en la funcionalidad o en módulos. El nombre completamente clasificado de una clase Java contiene el paquete y el nombre de la clase. Por ejemplo, java.lang.Object
es el nombre completamente clasificado de la clase Object
que es parte del paquete java.lang
.
El paquete java.lang
se importa por defecto y no necesitamos importar ninguna clase de este paquete explícitamente.
22. ¿Cuáles son los modificadores de acceso en Java?
Java proporciona control de acceso a través de las palabras clave de modificador de acceso public, private y protected. Cuando ninguna de estas se usa, se llama modificador de acceso predeterminado.
A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.
23. ¿Qué es una palabra clave final?
La palabra clave final se utiliza con Clase para asegurarse de que ninguna otra clase pueda extenderla. Por ejemplo, la clase String es final y no podemos extenderla.
Podemos usar la palabra clave final con métodos para asegurarnos de que las clases hijas no puedan anularlo.
La palabra clave final de Java se puede usar con variables para asegurarse de que solo se pueda asignar una vez. Sin embargo, el estado de la variable puede cambiar, por ejemplo, podemos asignar una variable final a un objeto solo una vez, pero las variables del objeto pueden cambiar más tarde.
Las variables de interfaz de Java son, por defecto, finales y estáticas.
24. ¿Qué es una palabra clave static?
La palabra clave static se puede usar con variables a nivel de clase para hacerlas globales, es decir, todos los objetos compartirán la misma variable.
También podemos usar la palabra clave static con métodos. Un método estático solo puede acceder a variables estáticas de la clase e invocar solo métodos estáticos de la clase.
Lee más detalladamente en java palabra clave static.
25. ¿Qué es finally y finalize en java?
El bloque finally se utiliza con try-catch para colocar el código que deseas que se ejecute siempre, incluso si una excepción es lanzada por el bloque try-catch. El bloque finally se usa principalmente para liberar recursos creados en el bloque try.
El finalize() es un método especial en la clase Object que podemos sobrescribir en nuestras clases. Este método es llamado por el recolector de basura cuando el objeto está siendo recolectado como basura. Este método generalmente se sobrescribe para liberar recursos del sistema cuando el objeto es recolectado como basura.
26. ¿Podemos declarar una clase como static?
No podemos declarar una clase de nivel superior como static; sin embargo, una clase interna puede ser declarada como static. Si la clase interna se declara como static, se le llama clase anidada estática.
La clase anidada estática es igual que cualquier otra clase de nivel superior y está anidada solo por conveniencia de empaquetado.
Lee más sobre clases internas en java clase interna.
¿Qué es la importación estática?
Si tenemos que usar alguna variable estática o método de otra clase, generalmente importamos la clase y luego usamos el método/variable con el nombre de la clase.
Podemos hacer lo mismo importando solo el método estático o la variable y luego usarlo en la clase como si perteneciera a ella.
El uso de la importación estática puede causar confusión, por lo que es mejor evitarlo. El uso excesivo de la importación estática puede hacer que su programa sea ilegible y difícil de mantener.
¿Qué es try-with-resources en Java?
Una de las características de Java 7 es la declaración try-with-resources para la gestión automática de recursos. Antes de Java 7, no existía la gestión automática de recursos y debíamos cerrar explícitamente el recurso. Normalmente, se hacía en el bloque finally
de una declaración try-catch. Este enfoque solía causar fugas de memoria cuando olvidábamos cerrar el recurso.
Desde Java 7, podemos crear recursos dentro del bloque try y usarlos. Java se encarga de cerrarlo tan pronto como el bloque try-catch se haya terminado. Lee más en Gestión automática de recursos en Java.
29. ¿Qué es un bloque de captura múltiple en Java?
Uno de los mejoramientos en Java 7 fue un bloque de captura múltiple donde podemos capturar múltiples excepciones en un solo bloque catch. Esto hace que nuestro código sea más corto y más limpio cuando cada bloque catch tiene un código similar.
Si un bloque catch maneja múltiples excepciones, puedes separarlas usando un pipe (|) y en este caso, el parámetro de excepción (ex) es final, por lo que no puedes cambiarlo.
Lee más en Bloque de captura múltiple en Java.
30. ¿Qué es un bloque estático?
El bloque estático de Java es el grupo de declaraciones que se ejecuta cuando la clase es cargada en la memoria por el ClassLoader de Java. Se utiliza para inicializar variables estáticas de la clase. Principalmente se usa para crear recursos estáticos cuando se carga la clase.
31. ¿Qué es una interfaz?
Las interfaces son conceptos fundamentales del lenguaje de programación Java y se utilizan mucho no solo en el JDK, sino también en los patrones de diseño de Java, la mayoría de los frameworks y herramientas. Las interfaces proporcionan una forma de lograr la abstracción en Java y se utilizan para definir el contrato para que las subclases lo implementen.
Las interfaces son útiles como punto de partida para definir un tipo y crear una jerarquía de nivel superior en nuestro código. Dado que una clase Java puede implementar múltiples interfaces, es mejor usar interfaces como superclase en la mayoría de los casos. Más información en java interface.
32. ¿Qué es una clase abstracta?
Las clases abstractas se utilizan en Java para crear una clase con alguna implementación de método predeterminada para las subclases. Una clase abstracta puede tener un método abstracto sin cuerpo y también puede tener métodos con implementación.
La palabra clave abstract se utiliza para crear una clase abstracta. Las clases abstractas no pueden ser instanciadas y se utilizan principalmente para proporcionar una base para que las subclases las extiendan e implementen los métodos abstractos y sobrescriban o utilicen los métodos implementados en la clase abstracta. Lee puntos importantes sobre las clases abstractas en clase abstracta de Java.
33. ¿Cuál es la diferencia entre una clase abstracta e una interfaz?
- La palabra clave abstract se utiliza para crear una clase abstracta, mientras que interface es la palabra clave para interfaces.
- Las clases abstractas pueden tener implementaciones de métodos, mientras que las interfaces no pueden.
- A class can extend only one abstract class but it can implement multiple interfaces.
- Podemos ejecutar una clase abstracta si tiene un método main(), mientras que no podemos ejecutar una interfaz.
Algunas diferencias más detalladas están en Diferencia entre Clase Abstracta e Interfaz.
34. ¿Puede una interfaz implementar o extender otra interfaz?
Las interfaces no implementan otra interfaz, la extienden. Dado que las interfaz no pueden tener implementaciones de métodos, no hay problema de diamante. Por eso tenemos herencias múltiples en interfaces, es decir, una interfaz puede extender múltiples interfaces.
A partir de Java 8, las interfaces pueden tener implementaciones de métodos por defecto. Por lo tanto, para manejar el problema del diamante cuando un método por defecto común está presente en múltiples interfaces, es obligatorio proporcionar la implementación del método en la clase que los implementa. Para más detalles con ejemplos, lee Cambios en la interfaz de Java 8.
35. ¿Qué es una interfaz marcadora?
A marker interface is an empty interface without any method but used to force some functionality in implementing classes by Java. Some of the well known marker interfaces are Serializable and Cloneable.
36. ¿Qué son las clases envoltorio?
Las clases envoltorio de Java son la representación en objetos de los ocho tipos primitivos en java. Todas las clases envoltorio en java son inmutables y finales. La autoboxing y unboxing de Java 5 permite una conversión fácil entre tipos primitivos y sus correspondientes clases envoltorio.
Lee más en Clases envoltorio en Java.
37. ¿Qué es Enum en Java?
Enum fue introducido en Java 1.5 como un nuevo tipo cuyos campos consisten en un conjunto fijo de constantes. Por ejemplo, en Java, podemos crear Direction como un enum con campos fijos como EAST, WEST, NORTH, SOUTH.
“enum” es la palabra clave para crear un tipo enum y es similar a la clase. Las constantes enum son implícitamente estáticas y finales. Lee más detalladamente en java enum.
38. ¿Qué son las Anotaciones en Java?
Las anotaciones de Java proporcionan información sobre el código y no tienen un efecto directo en el código que anotan. Las anotaciones se introducen en Java 5. La anotación es metadatos sobre el programa incrustado en el programa mismo. Puede ser analizado por la herramienta de análisis de anotaciones o el compilador. También podemos especificar la disponibilidad de la anotación tanto en tiempo de compilación como hasta tiempo de ejecución. Las anotaciones integradas de Java son @Override, @Deprecated y @SuppressWarnings. Lee más en java annotations.
39. ¿Qué es la API de Reflexión de Java y por qué es tan importante?
La API de Reflexión de Java proporciona la capacidad de inspeccionar y modificar el comportamiento en tiempo de ejecución de una aplicación Java. Podemos inspeccionar una clase Java, interfaz, enumeración y obtener detalles de sus métodos y campos. La API de Reflexión es un tema avanzado y debemos evitarlo en la programación normal. El uso de la API de Reflexión puede romper el patrón de diseño como el patrón Singleton al invocar el constructor privado, es decir, violando las reglas de los modificadores de acceso.
Aunque no utilizamos la API de Reflection en la programación normal, es muy importante tenerla. No podemos tener ningún framework como Spring, Hibernate o servidores como Tomcat, JBoss sin la API de Reflection. Invocan los métodos apropiados e instancian clases a través de la API de Reflection y lo utilizan mucho para otro procesamiento.
Lee el tutorial de Java Reflection para obtener un conocimiento profundo de la api de reflection.
40. ¿Qué es la Composición en java?
La composición es la técnica de diseño para implementar relaciones de tipo tiene-un en las clases. Podemos usar la composición de objetos para reutilizar código.
La composición en Java se logra mediante el uso de variables de instancia que hacen referencia a otros objetos. El beneficio de utilizar la composición es que podemos controlar la visibilidad de otros objetos para las clases cliente y reutilizar solo lo que necesitamos. Lee más con el ejemplo en el ejemplo de Composición en Java.
41. ¿Cuál es el beneficio de la Composición sobre la Herencia?
Una de las mejores prácticas de programación en Java es “favorecer la composición sobre la herencia”. Algunas de las posibles razones son:
- Cualquier cambio en la superclase podría afectar a la subclase incluso si no estamos utilizando los métodos de la superclase. Por ejemplo, si tenemos un método test() en la subclase y de repente alguien introduce un método test() en la superclase, obtendremos errores de compilación en la subclase. La composición nunca enfrentará este problema porque solo estamos usando los métodos que necesitamos.
- La herencia expone todos los métodos y variables de la superclase al cliente y si no tenemos control en el diseño de la superclase, puede provocar agujeros de seguridad. La composición nos permite proporcionar acceso restringido a los métodos y, por lo tanto, es más seguro.
- Podemos obtener enlace en tiempo de ejecución en la composición donde la herencia vincula las clases en tiempo de compilación. Por lo tanto, la composición proporciona flexibilidad en la invocación de métodos.
Puedes leer más sobre los beneficios anteriores de la composición sobre la herencia en java composition vs inheritance.
42. ¿Cómo ordenar una colección de objetos personalizados en Java?
Necesitamos implementar la interfaz Comparable para admitir la clasificación de objetos personalizados en una colección. La interfaz Comparable tiene el método compareTo(T obj) que es utilizado por los métodos de clasificación y al proporcionar esta implementación del método, podemos ofrecer una forma predeterminada de ordenar la colección de objetos personalizados.
Sin embargo, si desea ordenar según diferentes criterios, como ordenar una colección de empleados según el salario o la edad, entonces podemos crear instancias de Comparator y pasarlas como metodología de clasificación. Para obtener más detalles, lea Java Comparable y Comparator.
43. ¿Qué es una clase interna en Java?
Podemos definir una clase dentro de otra clase y se llaman clases anidadas. Cualquier clase anidada no estática se conoce como una clase interna. Las clases internas están asociadas con el objeto de la clase y pueden acceder a todas las variables y métodos de la clase externa. Dado que las clases internas están asociadas con la instancia, no podemos tener variables estáticas en ellas.
Podemos tener una clase interna local o una clase interna anónima dentro de una clase. Para obtener más detalles, lea java inner class.
44. ¿Qué es una clase interna anónima?
A local inner class without a name is known as an anonymous inner class. An anonymous class is defined and instantiated in a single statement. Anonymous inner class always extend a class or implement an interface.
Dado que una clase anónima no tiene nombre, no es posible definir un constructor para una clase anónima. Las clases internas anónimas solo son accesibles en el punto donde se definen.
45. ¿Qué es Classloader en Java?
El Classloader de Java es el programa que carga el programa de código de bytes en la memoria cuando queremos acceder a cualquier clase. Podemos crear nuestro propio Classloader mediante la extensión de la clase ClassLoader y la anulación del método loadClass(String name). Obtén más información en java classloader.
46. ¿Cuáles son los diferentes tipos de classloaders?
Existen tres tipos de Class Loaders integrados en Java.
- Bootstrap ClassLoader: carga clases internas de JDK, típicamente carga rt.jar y otras clases principales.
- Cargador de clases de extensiones: Carga clases desde el directorio de extensiones de JDK, generalmente el directorio $JAVA_HOME/lib/ext.
- Cargador de clases del sistema: Carga clases desde el classpath actual que puede establecerse al invocar un programa usando las opciones de línea de comandos -cp o -classpath.
47. ¿Qué es el operador ternario en Java?
El operador ternario de Java es el único operador condicional que toma tres operandos. Es una línea de código que reemplaza la instrucción if-then-else y se utiliza mucho en la programación en Java. Podemos usar el operador ternario para condiciones if-else o incluso condiciones switch utilizando operadores ternarios anidados. Se puede encontrar un ejemplo en operador ternario de Java.
48. ¿Qué hace la palabra clave super?
La palabra clave super se puede utilizar para acceder al método de la superclase cuando se ha sobrescrito el método en la clase secundaria.
Podemos usar la palabra clave super para invocar constructores de la superclase en el constructor de la clase secundaria, pero en este caso, debe ser la primera instrucción en el método constructor.
El uso de la palabra clave super se puede ver en la implementación de la clase secundaria a continuación.
49. ¿Qué son las declaraciones break y continue?
Podemos usar la declaración break para terminar un bucle for, while o do-while. Podemos usar una declaración break en la instrucción switch para salir del caso switch. Puedes ver el ejemplo de la declaración break en java break. Podemos usar un break con la etiqueta para terminar los bucles anidados.
La declaración continue omite la iteración actual de un bucle for, while o do-while. Podemos usar la declaración continue con la etiqueta para omitir la iteración actual del bucle más externo.
50. ¿Qué es la palabra clave this en Java?
La palabra clave this proporciona la referencia al objeto actual y se usa principalmente para asegurarse de que se utilicen las variables de objeto, no las variables locales que tienen el mismo nombre.
También podemos usar esta palabra clave para invocar otros constructores desde un constructor.
51. ¿Qué es el constructor predeterminado?
El constructor sin argumentos de una clase se conoce como constructor predeterminado. Cuando no definimos ningún constructor para la clase, el compilador de Java crea automáticamente el constructor predeterminado sin argumentos para la clase. Si hay otros constructores definidos, entonces el compilador no creará el constructor predeterminado por nosotros.
52. ¿Podemos tener un bloque try sin bloque catch?
Sí, podemos tener una declaración try-finally y por lo tanto evitar el bloque catch.
53. ¿Qué es la recolección de basura (Garbage Collection)?
La recolección de basura es el proceso de examinar la memoria del montón (heap memory), identificar qué objetos se están utilizando y cuáles no, y eliminar los objetos no utilizados. En Java, el proceso de liberar memoria se maneja automáticamente por el recolector de basura.
Podemos ejecutar el recolector de basura con el código Runtime.getRuntime().gc()
o usar el método de utilidad System.gc()
. Para un análisis detallado de la Memoria de Montón y la Recolección de Basura, por favor lee Java Garbage Collection.
54. ¿Qué es la Serialización y Deserialización?
Podemos convertir un objeto Java en un flujo de datos que se llama Serialización. Una vez que un objeto se convierte en flujo de datos, se puede guardar en un archivo, enviar por la red o usar en conexiones de socket.
El objeto debe implementar una interfaz Serializable y podemos usar java.io.ObjectOutputStream para escribir objetos en un archivo o en cualquier objeto OutputStream. Lee más en Java Serialization.
El proceso de convertir datos de flujo creados mediante serialización a un Objeto se llama deserialización. Lee más en Java Deserialization.
55. ¿Cómo ejecutar un archivo JAR a través del símbolo del sistema?
Podemos ejecutar un archivo JAR utilizando el comando java pero requiere una entrada Main-Class en el archivo manifiesto del JAR. Main-Class es el punto de entrada del JAR y es utilizado por el comando java para ejecutar la clase. Obtén más información en archivo JAR de Java.
56. ¿Cuál es el uso de la clase System?
La clase System de Java es una de las clases principales. Una de las formas más sencillas de registrar información para depuración es el método System.out.print().
La clase System es final, por lo que no podemos subclasarla y anular su comportamiento mediante la herencia. La clase System no proporciona ningún constructor público, por lo que no podemos instanciar esta clase y es por eso que todos sus métodos son estáticos.
Algunos de los métodos de utilidad de la clase System son para copiar matrices, obtener la hora actual, leer variables de entorno. Lee más en Clase System de Java.
57. ¿Qué es la palabra clave instanceof?
Podemos usar la palabra clave instanceof para verificar si un objeto pertenece a una clase o no. Deberíamos evitar su uso tanto como sea posible. Un ejemplo de uso es:
Dado que str es de tipo String en tiempo de ejecución, la primera declaración if se evalúa como verdadera y la segunda como falsa.
58. ¿Podemos usar String con switch case?
Una de las características de Java 7 fue la mejora del switch case para permitir Strings. Por lo tanto, si estás utilizando Java 7 o una versión superior, puedes usar String en las declaraciones switch-case. Lee más en ejemplo de switch-case String en Java.
59. ¿Java es de paso por valor o de paso por referencia?
Esta es una pregunta muy confusa, sabemos que las variables de objeto contienen la referencia a los objetos en el espacio de montón. Cuando invocamos cualquier método, se pasa una copia de estas variables y se almacena en la memoria de la pila del método. Podemos probar cualquier lenguaje, ya sea por referencia o por valor, a través de un método de intercambio genérico simple, para obtener más información, lee Java es Pase por Valor y No Pase por Referencia.
60. ¿Cuál es la diferencia entre la memoria de montón y la memoria de pila?
La diferencia principal entre la memoria de montón y la memoria de pila es la siguiente:
- La memoria de montón es utilizada por todas las partes de la aplicación, mientras que la memoria de pila es utilizada solo por un hilo de ejecución.
- Siempre que se crea un objeto, siempre se almacena en el espacio de montón y la memoria de la pila contiene la referencia a él. La memoria de la pila solo contiene variables primitivas locales y variables de referencia a objetos en el espacio de montón.
- La gestión de la memoria en la pila se realiza de manera LIFO, mientras que es más compleja en la memoria de montón porque se utiliza de forma global.
Para una explicación detallada con un programa de ejemplo, lee Java Montón vs Memoria de Pila.
61. ¿El compilador de Java se almacena en JDK, JRE o JVM?
La tarea del compilador de Java es convertir el programa Java en bytecode, tenemos el ejecutable javac
para eso. Por lo tanto, debe estar almacenado en JDK, no lo necesitamos en JRE y JVM son solo las especificaciones.
62. ¿Cuál será la salida de los siguientes programas?
Contexto: método estático en clase
Respuesta: El código no se compilará porque no podemos tener un método de clase Object con la palabra clave estática. Tenga en cuenta que la clase Object tiene el método toString(). Obtendrá un error en tiempo de compilación como “Este método estático no puede ocultar el método de instancia de Object”. La razón es que el método estático pertenece a la clase y como cada clase tiene como base un Object, no podemos tener el mismo método en la instancia y en la clase. No obtendrá este error si cambia el nombre del método de toString() a algo más que no esté presente en la superclase Object
.
Contexto: invocación de método estático
Respuesta: Bueno, esta es una situación extraña. Todos hemos visto NullPointerException
cuando invocamos un método en un objeto que es NULL. Pero aquí este programa funcionará e imprimirá “Test foo llamado”.
La razón de esto es la optimización del código del compilador de Java. Cuando el código Java se compila para producir bytecode, se da cuenta de que foo() es un método estático y debería ser llamado usando la clase. Entonces cambia la llamada al método obj.foo()
a Test.foo()
y por lo tanto no hay NullPointerException
.
I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?
Eso es todo para las preguntas y respuestas básicas de Java. Seguiré agregando más preguntas a la lista, si crees que me he perdido alguna importante, por favor házmelo saber a través de comentarios.
Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers