90% de seguridad en las preguntas de la entrevista
Existe una lista de 300 preguntas básicas de la entrevista sobre Java. Si le han hecho alguna pregunta central de la entrevista sobre Java, publíquela en la sección de preguntas. Le aseguramos que obtendrá aquí el 90% de las preguntas y respuestas de las entrevistas más frecuentes.
Las respuestas a las preguntas de la entrevista sobre Core Java son breves y van al grano. Las preguntas principales de la entrevista de Java se clasifican en preguntas de la entrevista de conceptos básicos de Java, preguntas de la entrevista de programación orientada a objetos, preguntas de la entrevista de manejo de cadenas, preguntas de la entrevista de subprocesos múltiples, preguntas de la entrevista de colección, preguntas de la entrevista de JDBC, etc.
1 2 3 4 5
Core Java: conceptos básicos de las preguntas de la entrevista de Java
1) ¿Qué es Java?
Java es el nivel alto, orientado a objetos Lenguaje de programación robusto, seguro, independiente de la plataforma, de alto rendimiento, multiproceso y portátil. Fue desarrollado por James Gosling en junio de 1991. También se la puede conocer como la plataforma, ya que proporciona su propio JRE y API.
2) ¿Cuáles son las diferencias entre C++ y Java?
Las diferencias entre C++ y Java se dan en la siguiente tabla.
Índice de comparación | C++ | Java |
---|---|---|
Plataforma independiente | C++ depende de la plataforma. | Java es independiente de la plataforma. |
Utilizado principalmente para | C++ se utiliza principalmente para la programación de sistemas. | Java se utiliza principalmente para la programación de aplicaciones. Se utiliza ampliamente en aplicaciones de ventana, basadas en web, empresariales y móviles. |
Objetivo de diseño | C++ fue diseñado para la programación de sistemas y aplicaciones. Fue una extensión de lenguaje de programación c . | Java fue diseñado y creado como intérprete para sistemas de impresión pero luego se extendió como soporte informático de red. Fue diseñado con el objetivo de ser fácil de usar y accesible para un público más amplio. |
Ir a | C++ admite la declaración goto. | Java no admite la declaración goto. |
herencia múltiple | C++ soporta herencia múltiple. | Java no admite herencia múltiple a través de clases. Se puede lograr mediante interfaces en java . |
Sobrecarga del operador | Soportes de C++ sobrecarga del operador . | Java no admite la sobrecarga de operadores. |
Consejos | C++ admite punteros. Puede escribir un programa de puntero en C++. | Java admite punteros internamente. Sin embargo, no puedes escribir el programa puntero en java. Significa que Java tiene soporte de puntero restringido en Java. |
Compilador e intérprete | C++ usa solo compilador. C++ se compila y ejecuta utilizando el compilador que convierte el código fuente en código de máquina, por lo que C++ depende de la plataforma. | Java utiliza tanto el compilador como el intérprete. El código fuente de Java se convierte en código de bytes en el momento de la compilación. El intérprete ejecuta este código de bytes en tiempo de ejecución y produce una salida. Java se interpreta por eso es independiente de la plataforma. |
Llamar por valor y llamar por referencia | C++ admite llamadas por valor y llamadas por referencia. | Java solo admite llamadas por valor. No hay llamada por referencia en java. |
Estructura y Unión | C++ soporta estructuras y uniones. | Java no admite estructuras ni uniones. |
Soporte de hilo | C++ no tiene soporte integrado para subprocesos. Se basa en bibliotecas de terceros para la compatibilidad con subprocesos. | Java tiene incorporado hilo apoyo. |
Comentario de documentación | C++ no admite comentarios de documentación. | Java admite comentarios de documentación (/** ... */) para crear documentación para el código fuente de Java. |
Palabra clave virtual | C++ admite palabras clave virtuales para que podamos decidir si anular o no una función. | Java no tiene ninguna palabra clave virtual. Podemos anular todos los métodos no estáticos de forma predeterminada. En otras palabras, los métodos no estáticos son virtuales por defecto. |
desplazamiento a la derecha sin firmar >>> | C++ no soporta el operador >>>. | Java admite el operador de desplazamiento a la derecha >>> sin signo que llena el cero en la parte superior para los números negativos. Para números positivos, funciona igual que el operador >>. |
Árbol de herencia | C++ siempre crea un nuevo árbol de herencia. | Java utiliza un único árbol de herencia siempre porque todas las clases son hijas de la clase Objeto en Java. La clase de objeto es la raíz del herencia árbol en java. |
Hardware | C++ está más cerca del hardware. | Java no es tan interactivo con el hardware. |
Orientado a objetos | C++ es un lenguaje orientado a objetos. Sin embargo, en lenguaje C, la jerarquía de raíz única no es posible. | Java también es un orientado a objetos idioma. Sin embargo, todo (excepto los tipos fundamentales) es un objeto en Java. Es una jerarquía de raíz única ya que todo se deriva de java.lang.Object. |
3) Enumere las características del lenguaje de programación Java.
Existen las siguientes características en el lenguaje de programación Java.
4) ¿Qué entiendes por máquina virtual Java?
máquina virtual de Java Es una máquina virtual que permite a la computadora ejecutar el programa Java. JVM actúa como un motor de ejecución que llama al método principal presente en el código Java. JVM es la especificación que debe implementarse en el sistema informático. El código Java es compilado por JVM para ser un Bytecode que es independiente de la máquina y cercano al código nativo.
5) ¿Cuál es la diferencia entre JDK, JRE y JVM?
JVM
JVM es un acrónimo de Máquina Virtual Java; es una máquina abstracta que proporciona el entorno de ejecución en el que se puede ejecutar el código de bytes de Java. Es una especificación que especifica el funcionamiento de la máquina virtual Java. Su implementación ha corrido a cargo de Oracle y otras empresas. Su implementación se conoce como JRE.
Las JVM están disponibles para muchas plataformas de hardware y software (por lo que la JVM depende de la plataforma). Es una instancia de tiempo de ejecución que se crea cuando ejecutamos la clase Java. Hay tres nociones de JVM: especificación, implementación e instancia.
JRE
JRE significa Java Runtime Environment. Es la implementación de JVM. Java Runtime Environment es un conjunto de herramientas de software que se utilizan para desarrollar aplicaciones Java. Se utiliza para proporcionar el entorno de ejecución. Es la implementación de JVM. Existe físicamente. Contiene un conjunto de bibliotecas + otros archivos que JVM usa en tiempo de ejecución.
JDK
JDK es un acrónimo de Java Development Kit. Es un entorno de desarrollo de software que se utiliza para desarrollar aplicaciones y subprogramas Java. Existe físicamente. Contiene herramientas de desarrollo JRE+. JDK es una implementación de cualquiera de las siguientes plataformas Java publicadas por Oracle Corporation:
- Plataforma Java de edición estándar
- Plataforma Java de edición empresarial
- Plataforma Java de edición micro
6) ¿Cuántos tipos de áreas de memoria asigna JVM?
Muchos tipos:
7) ¿Qué es el compilador JIT?
Compilador Justo a Tiempo (JIT): Se utiliza para mejorar el rendimiento. JIT compila partes del código de bytes que tienen una funcionalidad similar al mismo tiempo y, por lo tanto, reduce la cantidad de tiempo necesario para la compilación. Aquí el término compilador se refiere a un traductor del conjunto de instrucciones de una máquina virtual Java (JVM) al conjunto de instrucciones de una CPU específica.
8) ¿Qué es la plataforma?
Una plataforma es el entorno de hardware o software en el que se ejecuta una pieza de software. Hay dos tipos de plataformas, basadas en software y basadas en hardware. Java proporciona la plataforma basada en software.
9) ¿Cuáles son las principales diferencias entre la plataforma Java y otras plataformas?
Existen las siguientes diferencias entre la plataforma Java y otras plataformas.
- Java es la plataforma basada en software, mientras que otras plataformas pueden ser plataformas de hardware o plataformas basadas en software.
- Java se ejecuta sobre otras plataformas de hardware, mientras que otras plataformas solo pueden tener componentes de hardware.
10) ¿Qué le da a Java su naturaleza de 'escribir una vez y ejecutar en cualquier lugar'?
El código de bytes. El compilador de Java convierte los programas Java en un archivo de clase (Byte Code), que es el lenguaje intermedio entre el código fuente y el código de máquina. Este código de bytes no es específico de la plataforma y se puede ejecutar en cualquier computadora.
11) ¿Qué es el cargador de clases?
Classloader es un subsistema de JVM que se utiliza para cargar archivos de clases. Siempre que ejecutamos el programa Java, el cargador de clases lo carga primero. Hay tres cargadores de clases integrados en Java.
12) ¿El nombre de archivo .java vacío es un nombre de archivo fuente válido?
Sí, Java permite guardar nuestro archivo java mediante .Java solo, necesitamos compilarlo por javac.java y correr por nombre de clase java Tomemos un ejemplo sencillo:
//save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A
compilarlo por javac.java
ejecutarlo por java A
13) ¿Es la palabra clave eliminar, siguiente, principal, salir o nula en Java?
No.
14) Si no proporciono ningún argumento en la línea de comando, ¿cuál será el valor almacenado en la matriz de cadenas que se pasará al método main(), vacío o NULL?
Está vacío, pero no nulo.
15) ¿Qué pasa si escribo static public void en lugar de public static void?
El programa se compila y ejecuta correctamente porque el orden de los especificadores no importa en Java.
16) ¿Cuál es el valor predeterminado de las variables locales?
Las variables locales no se inicializan con ningún valor predeterminado, ni primitivas ni referencias a objetos.
17) ¿Cuáles son los distintos especificadores de acceso en Java?
En Java, los especificadores de acceso son las palabras clave que se utilizan para definir el alcance de acceso del método, clase o variable. En Java, hay cuatro especificadores de acceso que se detallan a continuación.
18) ¿Cuál es el propósito de los métodos y variables estáticos?
Los métodos o variables definidas como estáticas se comparten entre todos los objetos de la clase. Lo estático es parte de la clase y no del objeto. Las variables estáticas se almacenan en el área de clase y no necesitamos crear el objeto para acceder a dichas variables. Por lo tanto, estático se usa en el caso en que necesitamos definir variables o métodos que sean comunes a todos los objetos de la clase.
Por ejemplo, en la clase que simula la colección de estudiantes de una universidad, el nombre de la universidad es el atributo común a todos los estudiantes. Por lo tanto, el nombre de la universidad se definirá como estático .
19) ¿Cuáles son las ventajas de los Paquetes en Java?
Existen varias ventajas al definir paquetes en Java.
- Los paquetes evitan los conflictos de nombres.
- El Paquete proporciona un control de acceso más sencillo.
- También podemos tener las clases ocultas que no son visibles fuera y utilizadas por el paquete.
- Es más fácil localizar las clases relacionadas.
20) ¿Cuál es el resultado del siguiente programa Java?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
La salida del código anterior será
30Javatpoint Javatpoint1020
Explicación
En el primer caso, 10 y 20 se tratan como números y se suman para obtener 30. Ahora, su suma 30 se trata como la cadena y se concatena con la cadena. Punto Java . Por lo tanto, la salida será 30Javatpoint .
En el segundo caso, la cadena Javatpoint se concatena con 10 para ser la cadena Javatpoint10 que luego se concatenará con 20 para ser Javatpoint1020 .
21) ¿Cuál es el resultado del siguiente programa Java?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
La salida del código anterior será
200Javatpoint Javatpoint200
Explicación
En el primer caso, los números 10 y 20 se multiplicarán primero y luego el resultado 200 se tratará como la cadena y se concatenará con la cadena. Punto Java para producir la salida 200Javatpoint .
En el segundo caso, los números 10 y 20 se multiplicarán primero para obtener 200 porque la precedencia de la multiplicación es mayor que la suma. El resultado 200 será tratado como la cadena y concatenado con la cadena. Punto Java para producir la salida como Javatpoint200 .
22) ¿Cuál es el resultado del siguiente programa Java?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
El código anterior dará un error en tiempo de compilación porque el bucle for exige un valor booleano en la segunda parte y estamos proporcionando un valor entero, es decir, 0.
Core Java: conceptos de programación orientada a objetos: preguntas iniciales de la entrevista sobre programación orientada a objetos
Se dan más de 50 preguntas de entrevista sobre POO (sistema y programación orientada a objetos). Sin embargo, se han categorizado en muchas secciones, como preguntas de entrevista de constructor, preguntas de entrevista estática, preguntas de entrevista de herencia, preguntas de entrevista de abstracción, preguntas de entrevista de polimorfismo, etc., para una mejor comprensión.
23) ¿Qué es el paradigma orientado a objetos?
Es un paradigma de programación basado en objetos que tienen datos y métodos definidos en la clase a la que pertenece. El paradigma orientado a objetos tiene como objetivo incorporar las ventajas de la modularidad y la reutilización. Los objetos son instancias de clases que interactúan entre sí para diseñar aplicaciones y programas. Existen las siguientes características del paradigma orientado a objetos.
- Sigue el enfoque ascendente en el diseño de programas.
- Centrarse en los datos con métodos para operar sobre los datos del objeto.
- Incluye el concepto de encapsulación y abstracción que oculta las complejidades al usuario y muestra solo la funcionalidad.
- Implementa el enfoque en tiempo real como herencia, abstracción, etc.
- Los ejemplos del paradigma orientado a objetos son C++, Simula, Smalltalk, Python, C#, etc.
24) ¿Qué es un objeto?
El Objeto es la entidad en tiempo real que tiene algún estado y comportamiento. En Java, Objeto es una instancia de la clase que tiene las variables de instancia como el estado del objeto y los métodos como el comportamiento del objeto. El objeto de una clase se puede crear usando el nuevo palabra clave.
25) ¿Cuál es la diferencia entre un lenguaje de programación orientado a objetos y un lenguaje de programación basado en objetos?
Existen las siguientes diferencias básicas entre el lenguaje orientado a objetos y el lenguaje basado en objetos.
- Los lenguajes orientados a objetos siguen todos los conceptos de la programación orientada a objetos, mientras que el lenguaje basado en objetos no sigue todos los conceptos de la programación orientada a objetos, como herencia y polimorfismo.
- Los lenguajes orientados a objetos no tienen objetos incorporados, mientras que los lenguajes basados en objetos tienen objetos incorporados; por ejemplo, JavaScript tiene un objeto de ventana.
- Ejemplos de programación orientada a objetos son Java, C#, Smalltalk, etc., mientras que los ejemplos de lenguajes basados en objetos son JavaScript, VBScript, etc.
26) ¿Cuál será el valor inicial de una referencia de objeto que se define como una variable de instancia?
Todas las referencias a objetos se inicializan como nulas en Java.
Core Java - Conceptos de programación orientada a objetos: preguntas de la entrevista al constructor
27) ¿Qué es el constructor?
El constructor se puede definir como el tipo especial de método que se utiliza para inicializar el estado de un objeto. Se invoca cuando se crea una instancia de la clase y se asigna la memoria para el objeto. Cada vez que se crea un objeto utilizando el nuevo palabra clave, se llama al constructor predeterminado de la clase. El nombre del constructor debe ser similar al nombre de la clase. El constructor no debe tener un tipo de retorno explícito.
Más detalles.28) ¿Cuántos tipos de constructores se utilizan en Java?
Según los parámetros pasados en los constructores, existen dos tipos de constructores en Java.
29) ¿Cuál es el propósito de un constructor predeterminado?
El propósito del constructor predeterminado es asignar el valor predeterminado a los objetos. El compilador de Java crea implícitamente un constructor predeterminado si no hay ningún constructor en la clase.
class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } }Pruébalo ahora
Producción:
0 null 0 null
Explicación: En la clase anterior, no estás creando ningún constructor, por lo que el compilador te proporciona un constructor predeterminado. Aquí los valores 0 y nulos los proporciona el constructor predeterminado.
Más detalles.
30) ¿El constructor devuelve algún valor?
Años: sí, el constructor devuelve implícitamente la instancia actual de la clase (no puede utilizar un tipo de retorno explícito con el constructor). Más detalles.
31) ¿Se hereda el constructor?
No, el constructor no se hereda.
32) ¿Puedes hacer un constructor definitivo?
No, el constructor no puede ser definitivo.
¿Dónde encuentro la configuración de mi navegador?
33) ¿Podemos sobrecargar los constructores?
Sí, los constructores se pueden sobrecargar cambiando la cantidad de argumentos aceptados por el constructor o cambiando el tipo de datos de los parámetros. Considere el siguiente ejemplo.
class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } }
En el programa anterior, el constructor Test está sobrecargado con otro constructor. En la primera llamada al constructor, se llama al constructor con un argumento y se inicializará con el valor 10. Sin embargo, en la segunda llamada al constructor, se llama al constructor con los 2 argumentos y se inicializará con el valor 15.
34) ¿Qué entiendes por constructor de copias en Java?
No existe un constructor de copias en Java. Sin embargo, podemos copiar los valores de un objeto a otro como el constructor de copias en C++.
Hay muchas formas de copiar los valores de un objeto a otro en Java. Ellos son:
- Por constructor
- Asignando los valores de un objeto a otro.
- Por el método clone() de la clase Object
En este ejemplo, copiaremos los valores de un objeto en otro usando el constructor Java.
//Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }Pruébalo ahora
Producción:
111 Karan 111 Karan
35) ¿Cuáles son las diferencias entre los constructores y los métodos?
Existen muchas diferencias entre constructores y métodos. Se dan a continuación.
Constructor Java | Método Java |
---|---|
Se utiliza un constructor para inicializar el estado de un objeto. | Se utiliza un método para exponer el comportamiento de un objeto. |
Un constructor no debe tener un tipo de retorno. | Un método debe tener un tipo de retorno. |
El constructor se invoca implícitamente. | El método se invoca explícitamente. |
El compilador de Java proporciona un constructor predeterminado si no tiene ningún constructor en una clase. | El compilador no proporciona el método en ningún caso. |
El nombre del constructor debe ser el mismo que el nombre de la clase. | El nombre del método puede ser o no el mismo que el nombre de la clase. |
36) ¿Cuál es el resultado del siguiente programa Java?
public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } }
La salida del siguiente programa es:
a = 10 b = 15
Aquí, el tipo de datos de las variables a y b, es decir, byte, se promueve a int y se llama al primer constructor parametrizado con los dos parámetros enteros.
37) ¿Cuál es el resultado del siguiente programa Java?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
La salida del programa es 0 porque la variable i se inicializa a 0 internamente. Como sabemos que se invoca implícitamente un constructor predeterminado si no hay ningún constructor en la clase, la variable i se inicializa a 0 ya que no hay ningún constructor en la clase.
38) ¿Cuál es el resultado del siguiente programa Java?
class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } }
Hay un error del compilador en el programa porque hay una llamada al constructor predeterminado en el método principal que no está presente en la clase. Sin embargo, sólo hay un constructor parametrizado en la clase Prueba. Por lo tanto, el constructor no invoca implícitamente ningún constructor predeterminado.
Core Java: conceptos de programación orientada a objetos: preguntas de la entrevista con palabras clave estáticas
39) ¿Qué es la variable estática?
La variable estática se utiliza para referirse a la propiedad común de todos los objetos (que no es única para cada objeto), por ejemplo, el nombre de los empleados de la empresa, el nombre de los estudiantes de la universidad, etc. La variable estática obtiene memoria solo una vez en el área de clase en el momento de la carga de clases. El uso de una variable estática hace que su programa sea más eficiente en memoria (ahorra memoria). La variable estática pertenece a la clase y no al objeto.
//Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } }Pruébalo ahora
Output:111 Karan ITS 222 Aryan ITS
Más detalles.
40) ¿Qué es el método estático?
- Un método estático pertenece a la clase y no al objeto.
- No es necesario crear el objeto para llamar a los métodos estáticos.
- Un método estático puede acceder y cambiar el valor de la variable estática.
41) ¿Cuáles son las restricciones que se aplican a los métodos estáticos de Java?
Se aplican dos restricciones principales a los métodos estáticos.
- El método estático no puede utilizar miembros de datos no estáticos ni llamar al método no estático directamente.
- this y super no se pueden usar en un contexto estático ya que no son estáticos.
42) ¿Por qué el método principal es estático?
Porque no es necesario que el objeto llame al método estático. Si hacemos que el método principal no sea estático, JVM tendrá que crear su objeto primero y luego llamar al método main(), lo que conducirá a la asignación de memoria adicional. Más detalles.
43) ¿Podemos anular los métodos estáticos?
No, no podemos anular los métodos estáticos.
44) ¿Qué es el bloque estático?
El bloque estático se utiliza para inicializar el miembro de datos estáticos. Se ejecuta antes del método principal, en el momento de la carga de clases.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Pruébalo ahora
Output: static block is invoked Hello main
Más detalles.
45) ¿Podemos ejecutar un programa sin el método main()?
Respuesta) No, era posible antes de JDK 1.7 usando el bloque estático. Desde JDK 1.7, no es posible. Más detalles.
46) ¿Qué pasa si se elimina el modificador estático de la firma del método principal?
El programa se compila. Sin embargo, en tiempo de ejecución, arroja un error 'NoSuchMethodError'.
47) ¿Cuál es la diferencia entre el método estático (clase) y el método de instancia?
método estático o de clase | método de instancia |
---|---|
1) Un método declarado como estático se conoce como método estático. | Un método que no se declara como estático se conoce como método de instancia. |
2) No necesitamos crear los objetos para llamar a los métodos estáticos. | Se requiere que el objeto llame a los métodos de instancia. |
3) No se puede acceder directamente a miembros no estáticos (instancias) en el contexto estático (método estático, bloque estático y clase anidada estática). | Se puede acceder a variables estáticas y no estáticas en métodos de instancia. |
4) Por ejemplo: public static int cube(int n){ return n*n*n;} | Por ejemplo: public void msg(){...}. |
48) ¿Podemos hacer que los constructores sean estáticos?
Como sabemos, el contexto estático (método, bloque o variable) pertenece a la clase, no al objeto. Dado que los constructores se invocan sólo cuando se crea el objeto, no tiene sentido hacer que los constructores sean estáticos. Sin embargo, si intenta hacerlo, el compilador mostrará el error del compilador.
49) ¿Podemos hacer que los métodos abstractos sean estáticos en Java?
En Java, si hacemos que los métodos abstractos sean estáticos, se convertirán en parte de la clase y podremos llamarlos directamente, lo cual es innecesario. Llamar a un método indefinido es completamente inútil, por lo tanto, no está permitido.
50) ¿Podemos declarar las variables y métodos estáticos en una clase abstracta?
Sí, podemos declarar variables y métodos estáticos en un método abstracto. Como sabemos, no es necesario hacer que el objeto acceda al contexto estático, por lo tanto, podemos acceder al contexto estático declarado dentro de la clase abstracta usando el nombre de la clase abstracta. Considere el siguiente ejemplo.
abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } }
Producción
hi !! I am good !! i = 102
Core Java: conceptos de programación orientada a objetos: preguntas de la entrevista sobre herencia
51) ¿Qué es? este palabra clave en java?
El este La palabra clave es una variable de referencia que hace referencia al objeto actual. Existen varios usos de esta palabra clave en Java. Se puede utilizar para hacer referencia a propiedades de clase actuales, como métodos de instancia, variables, constructores, etc. También se puede pasar como argumento a los métodos o constructores. También se puede devolver desde el método como la instancia de clase actual.
Más detalles.
52) ¿Cuáles son los principales usos de esta palabra clave?
Existen los siguientes usos de este palabra clave.
53) ¿Podemos asignar la referencia a este ¿variable?
No, esto no se puede asignar a ningún valor porque siempre apunta al objeto de clase actual y esta es la referencia final en Java. Sin embargo, si intentamos hacerlo, se mostrará el error del compilador. Considere el siguiente ejemplo.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Producción
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Puede este ¿Se utilizará la palabra clave para referir miembros estáticos?
Sí, es posible utilizar esta palabra clave para hacer referencia a miembros estáticos porque es solo una variable de referencia que hace referencia al objeto de clase actual. Sin embargo, como sabemos, no es necesario acceder a variables estáticas a través de objetos, por lo que no es la mejor práctica utilizar esto para hacer referencia a miembros estáticos. Considere el siguiente ejemplo.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Producción
10
55) ¿Cómo se puede realizar el encadenamiento de constructores usando esta palabra clave?
El encadenamiento de constructores nos permite llamar a un constructor desde otro constructor de la clase con respecto al objeto de clase actual. Podemos usar esta palabra clave para realizar el encadenamiento de constructores dentro de la misma clase. Considere el siguiente ejemplo que ilustra cómo podemos usar esta palabra clave para lograr el encadenamiento de constructores.
public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } }
Producción
ID: 105 Name:Vikas age:22 address: Delhi
56) ¿Cuáles son las ventajas de pasar esto a un método en lugar del propio objeto de clase actual?
Como sabemos, esto se refiere al objeto de clase actual, por lo tanto, debe ser similar al objeto de clase actual. Sin embargo, puede haber dos ventajas principales al pasar esto a un método en lugar del objeto de clase actual.
- esta es una variable final. Por lo tanto, esto no se puede asignar a ningún valor nuevo, mientras que el objeto de clase actual puede no ser definitivo y se puede cambiar.
- esto se puede utilizar en el bloque sincronizado.
57) ¿Qué es la Herencia?
La herencia es un mecanismo por el cual un objeto adquiere todas las propiedades y comportamiento de otro objeto de otra clase. Se utiliza para la reutilización de código y la anulación de métodos. La idea detrás de la herencia en Java es que se pueden crear nuevas clases que se basan en clases existentes. Cuando heredas de una clase existente, puedes reutilizar métodos y campos de la clase principal. Además, también puedes agregar nuevos métodos y campos en tu clase actual. La herencia representa la relación IS-A, que también se conoce como relación padre-hijo.
Hay cinco tipos de herencia en Java.
- Herencia de un solo nivel
- Herencia multinivel
- Herencia múltiple
- Herencia jerárquica
- Herencia híbrida
La herencia múltiple no se admite en Java a través de clases.
Más detalles.58) ¿Por qué se utiliza la herencia en Java?
Existen varias ventajas de utilizar la herencia en Java que se detallan a continuación.
- La herencia proporciona reutilización del código. La clase derivada no necesita redefinir el método de la clase base a menos que necesite proporcionar la implementación específica del método.
- El polimorfismo en tiempo de ejecución no se puede lograr sin utilizar la herencia.
- Podemos simular la herencia de clases con objetos en tiempo real, lo que hace que la programación orientada a objetos sea más realista.
- La herencia proporciona ocultación de datos. La clase base puede ocultar algunos datos de la clase derivada haciéndola privada.
- La anulación de métodos no se puede lograr sin herencia. Al anular métodos, podemos dar una implementación específica de algún método básico contenido en la clase base.
59) ¿Qué clase es la superclase de todas las clases?
La clase de objeto es la superclase de todas las demás clases en Java.
60) ¿Por qué no se admite la herencia múltiple en Java?
Para reducir la complejidad y simplificar el lenguaje, Java no admite la herencia múltiple. Considere un escenario donde A, B y C son tres clases. La clase C hereda las clases A y B. Si las clases A y B tienen el mismo método y lo llama desde un objeto de clase secundaria, habrá ambigüedad al llamar al método de la clase A o B.
Dado que los errores en tiempo de compilación son mejores que los errores en tiempo de ejecución, Java genera errores en tiempo de compilación si hereda 2 clases. Entonces, ya sea que tenga el mismo método o uno diferente, habrá un error en el tiempo de compilación.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Pruébalo ahora
Compile Time Error
61) ¿Qué es la agregación?
La agregación se puede definir como la relación entre dos clases donde la clase agregada contiene una referencia a la clase que posee. La agregación se describe mejor como tiene un relación. Por ejemplo, la clase agregada Empleado que tiene varios campos, como edad, nombre y salario, también contiene un objeto de clase Dirección que tiene varios campos, como Dirección-Línea 1, Ciudad, Estado y código PIN. En otras palabras, podemos decir que Empleado (clase) tiene un objeto de clase Dirección. Considere el siguiente ejemplo.
Address.java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
Employee.java
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }
Producción
111 varun gzb UP india 112 arun gno UP india
62) ¿Qué es la composición?
Mantener la referencia de una clase dentro de otra clase se conoce como composición. Cuando un objeto contiene otro objeto, si el objeto contenido no puede existir sin la existencia del objeto contenedor, entonces se llama composición. En otras palabras, podemos decir que la composición es el caso particular de agregación que representa una relación más fuerte entre dos objetos. Ejemplo: una clase contiene estudiantes. Un estudiante no puede existir sin una clase. Existe composición entre la clase y los estudiantes.
63) ¿Cuál es la diferencia entre agregación y composición?
La agregación representa la relación débil, mientras que la composición representa la relación fuerte. Por ejemplo, la bicicleta tiene un indicador (agregación), pero la bicicleta tiene un motor (composición).
64) ¿Por qué Java no admite punteros?
El puntero es una variable que hace referencia a la dirección de memoria. No se utilizan en Java porque no son seguros y complejos de entender.
65) ¿Qué es super en java?
El súper La palabra clave en Java es una variable de referencia que se utiliza para hacer referencia al objeto de clase principal inmediato. Cada vez que se crea la instancia de la subclase, se crea implícitamente una instancia de la clase principal a la que se hace referencia mediante una variable de superreferencia. El compilador llama implícitamente a super() en el constructor de la clase si no hay super o this.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } }Pruébalo ahora
Producción:
animal is created dog is createdMás detalles.
66) ¿Cómo se puede realizar el encadenamiento de constructores utilizando la palabra clave super?
class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } }
Producción
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) ¿Cuáles son los principales usos de la super palabra clave?
Existen los siguientes usos de super palabra clave.
- super se puede utilizar para hacer referencia a la variable de instancia de la clase principal inmediata.
- super se puede utilizar para invocar el método de clase padre inmediato.
- super() se puede utilizar para invocar el constructor de la clase principal inmediata.
68) ¿Cuáles son las diferencias entre esta y súper palabra clave?
Existen las siguientes diferencias entre esta y super palabra clave.
- La palabra clave super siempre apunta a los contextos de la clase principal, mientras que esta palabra clave siempre apunta al contexto de la clase actual.
- La palabra clave super se usa principalmente para inicializar las variables de la clase base dentro del constructor de la clase derivada, mientras que esta palabra clave se usa principalmente para diferenciar entre variables locales y de instancia cuando se pasa en el constructor de la clase.
- Super y this deben ser la primera declaración dentro del constructor; de lo contrario, el compilador arrojará un error.
69) ¿Cuál es el resultado del siguiente programa Java?
class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } }
Producción
Person class constructor called Employee class constructor called
Explicación
El compilador invoca implícitamente super() si no se incluye super() o this() explícitamente dentro del constructor de la clase derivada. Por lo tanto, en este caso, primero se llama al constructor de la clase Persona y luego al constructor de la clase Empleado.
70) ¿Puedes usar this() y super() ambos en un constructor?
No, porque this() y super() deben ser la primera declaración en el constructor de la clase.
Ejemplo:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Producción:
Test.java:5: error: call to this must be first statement in constructor
71) ¿Qué es la clonación de objetos?
La clonación de objetos se utiliza para crear la copia exacta de un objeto. El método clone() de la clase Object se utiliza para clonar un objeto. El java.lang.Cloneable La interfaz debe ser implementada por la clase cuyo clon de objeto queremos crear. Si no implementamos la interfaz Cloneable, el método clone() genera CloneNotSupportedException.
protected Object clone() throws CloneNotSupportedExceptionMás detalles.
Core Java: conceptos de programación orientada a objetos: preguntas de la entrevista sobre sobrecarga de métodos
72) ¿Qué es la sobrecarga de métodos?
La sobrecarga de métodos es la técnica del polimorfismo que nos permite crear múltiples métodos con el mismo nombre pero con diferente firma. Podemos lograr la sobrecarga de métodos de dos maneras.
- Cambiando el número de argumentos
- Cambiando el tipo de datos de los argumentos
La sobrecarga de métodos aumenta la legibilidad del programa. La sobrecarga de métodos se realiza para descubrir el programa rápidamente.
Más detalles.73) ¿Por qué no es posible la sobrecarga de métodos cambiando el tipo de retorno en Java?
En Java, la sobrecarga de métodos no es posible cambiando el tipo de retorno del programa para evitar la ambigüedad.
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}Pruébalo ahora
Producción:
Compile Time Error: method add(int, int) is already defined in class AdderMás detalles.
74) ¿Podemos sobrecargar los métodos haciéndolos estáticos?
No, no podemos sobrecargar los métodos simplemente aplicándoles la palabra clave estática (el número de parámetros y tipos son los mismos). Considere el siguiente ejemplo.
public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } }
Producción
Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors
75) ¿Podemos sobrecargar el método main()?
Sí, podemos tener cualquier número de métodos principales en un programa Java mediante la sobrecarga de métodos.
Más detalles.76) ¿Qué es la sobrecarga de métodos con la promoción de tipos?
Por promoción de tipo es sobrecarga de métodos, queremos decir que un tipo de datos se puede promover a otro implícitamente si no se encuentra una coincidencia exacta.
Como se muestra en el diagrama anterior, el byte se puede promover a corto, int, largo, flotante o doble. El tipo de datos corto se puede promover a int, long, float o double. El tipo de datos char se puede promover a int, long, float o double, etc. Considere el siguiente ejemplo.
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }Pruébalo ahora
Producción
40 60
77) ¿Cuál es el resultado del siguiente programa Java?
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }
Producción
OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error
Explicación
Hay dos métodos definidos con el mismo nombre, es decir, suma. El primer método acepta el tipo entero y largo, mientras que el segundo método acepta el tipo largo y entero. Los parámetros pasados son a = 20, b = 20. No podemos decir qué método se llamará ya que no se menciona una diferenciación clara entre literal entero y literal largo. Éste es el caso de la ambigüedad. Por lo tanto, el compilador arrojará un error.
Core Java: conceptos de programación orientada a objetos: método que anula las preguntas de la entrevista
78) ¿Qué es la anulación de métodos?
Si una subclase proporciona una implementación específica de un método que ya proporciona su clase principal, se conoce como anulación de método. Se utiliza para polimorfismo en tiempo de ejecución y para implementar los métodos de interfaz.
Reglas para anular métodos
- El método debe tener el mismo nombre que en la clase principal.
- El método debe tener la misma firma que la clase principal.
- Dos clases deben tener una relación IS-A entre ellas.
79) ¿Podemos anular el método estático?
No, no puede anular el método estático porque es parte de la clase, no el objeto.
80) ¿Por qué no podemos anular el método estático?
Esto se debe a que el método estático es parte de la clase y está vinculado a la clase, mientras que el método de instancia está vinculado al objeto, y el método estático obtiene memoria en el área de clase y la instancia obtiene memoria en un montón.
81) ¿Podemos anular el método sobrecargado?
Sí.
82) Diferencia entre método de sobrecarga y anulación.
Sobrecarga de métodos | Anulación de métodos |
---|---|
1) La sobrecarga de métodos aumenta la legibilidad del programa. | La anulación de métodos proporciona la implementación específica del método que ya proporciona su superclase. |
2) La sobrecarga de métodos ocurre dentro de la clase. | La anulación de métodos se produce en dos clases que tienen una relación IS-A entre ellas. |
3) En este caso, los parámetros deben ser diferentes. | En este caso, los parámetros deben ser los mismos. |
83) ¿Podemos anular los métodos privados?
No, no podemos anular los métodos privados porque el alcance de los métodos privados está limitado a la clase y no podemos acceder a ellos fuera de la clase.
84) ¿Podemos cambiar el alcance del método anulado en la subclase?
Sí, podemos cambiar el alcance del método anulado en la subclase. Sin embargo, debemos tener en cuenta que no podemos disminuir la accesibilidad del método. Se debe tener en cuenta el siguiente punto al cambiar la accesibilidad del método.
- El privado se puede cambiar a protegido, público o predeterminado.
- El protegido se puede cambiar a público o predeterminado.
- El valor predeterminado se puede cambiar a público.
- El público siempre seguirá siendo público.
85) ¿Podemos modificar la cláusula throws del método de la superclase mientras la anulamos en la subclase?
Sí, podemos modificar la cláusula throws del método de la superclase mientras la anulamos en la subclase. Sin embargo, existen algunas reglas que se deben seguir al anular en caso de manejo de excepciones.
- Si el método de la superclase no declara una excepción, el método anulado de la subclase no puede declarar la excepción marcada, pero puede declarar la excepción no marcada.
- Si el método de la superclase declara una excepción, el método anulado de la subclase puede declarar la misma excepción de la subclase o ninguna excepción, pero no puede declarar la excepción principal.
86) ¿Cuál es el resultado del siguiente programa Java?
class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } }
Producción
Base class method called with integer a = 10
Explicación
El método() está sobrecargado en la clase Base mientras que se deriva en la clase Derivada con el tipo doble como parámetro. En la llamada al método, se pasa el número entero.
87) ¿Se pueden tener funciones virtuales en Java?
Sí, todas las funciones en Java son virtuales por defecto.
88) ¿Qué es el tipo de retorno covariante?
Ahora, desde java5, es posible anular cualquier método cambiando el tipo de retorno si el tipo de retorno del método de anulación de la subclase es de tipo subclase. Se conoce como tipo de retorno covariante. El tipo de retorno covariante especifica que el tipo de retorno puede variar en la misma dirección que la subclase.
class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } }Pruébalo ahora
Output: welcome to covariant return typeMás detalles.
89) ¿Cuál es el resultado del siguiente programa Java?
class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } }
Producción
Derived method called ...
Explicación
El método de la clase Base, es decir, baseMethod() se anula en la clase Derivada. En la clase de prueba, la variable de referencia b (de tipo clase base) se refiere a la instancia de la clase derivada. Aquí, el polimorfismo en tiempo de ejecución se logra entre la clase Base y Derivada. En el momento de la compilación, la presencia del método baseMethod se verifica en la clase Base. Si está presente, el programa se compiló; de lo contrario, se mostrará el error del compilador. En este caso, baseMethod está presente en la clase Base; por lo tanto, se compila correctamente. Sin embargo, en tiempo de ejecución, comprueba si el método base ha sido anulado por la clase derivada; de ser así, se llama al método de la clase derivada; de lo contrario, se llama al método de la clase base. En este caso, la clase Derivada anula el método base; por lo tanto, se llama al método de clase derivada.
Core Java: conceptos de programación orientada a objetos: preguntas de la entrevista con la palabra clave final
90) ¿Cuál es la variable final?
En Java, la variable final se utiliza para impedir que el usuario la actualice. Si inicializamos la variable final, no podemos cambiar su valor. En otras palabras, podemos decir que la variable final, una vez asignada a un valor, nunca podrá cambiarse después de eso. La variable final que no está asignada a ningún valor solo se puede asignar a través del constructor de clase.
class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of classPruébalo ahora
Output:Compile Time ErrorMás detalles.
91) ¿Cuál es el método final?
Si cambiamos cualquier método a un método final, no podemos anularlo. Más detalles.
class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }Pruébalo ahora
Output:Compile Time Error
92) ¿Cuál es la clase final?
Si hacemos que una clase sea final, no podemos heredarla en ninguna de las subclases.
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } }Pruébalo ahora
Output:Compile Time ErrorMás detalles.
93) ¿Cuál es la variable en blanco final?
Una variable final, que no se inicializa en el momento de la declaración, se conoce como variable en blanco final. No podemos inicializar la variable en blanco final directamente. En lugar de ello, tenemos que inicializarlo utilizando el constructor de clases. Es útil en el caso en que el usuario tiene algunos datos que otros no deben cambiar, por ejemplo, el número PAN. Considere el siguiente ejemplo:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }Más detalles.
94) ¿Podemos inicializar la variable en blanco final?
Sí, si no es estático, podemos inicializarlo en el constructor. Si es una variable final estática en blanco, solo se puede inicializar en el bloque estático. Más detalles.
95) ¿Puedes declarar el método principal como final?
Sí, podemos declarar el método principal como public static final void main(String[] args){}.
96) ¿Cuál es el resultado del siguiente programa Java?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Producción
20
Explicación
Dado que i es la variable final en blanco. Sólo se puede inicializar una vez. Lo hemos inicializado a 20. Por lo tanto, se imprimirán 20.
97) ¿Cuál es el resultado del siguiente programa Java?
class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } }
Producción
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Explicación
El método getDetails() es final; por lo tanto, no se puede anular en la subclase.
98) ¿Podemos declarar un constructor como final?
El constructor nunca puede declararse como final porque nunca se hereda. Los constructores no son métodos ordinarios; por lo tanto, no tiene sentido declarar constructores como finales. Sin embargo, si intenta hacerlo, el compilador arrojará un error.
99) ¿Podemos declarar una interfaz como final?
No, no podemos declarar una interfaz como final porque alguna clase debe implementar la interfaz para proporcionar su definición. Por lo tanto, no tiene sentido hacer que una interfaz sea definitiva. Sin embargo, si intenta hacerlo, el compilador mostrará un error.
100) ¿Cuál es la diferencia entre el método final y el método abstracto?
La principal diferencia entre el método final y el método abstracto es que el método abstracto no puede ser final ya que necesitamos anularlos en la subclase para dar su definición.