90% de garantia nas perguntas da entrevista
Há uma lista de 300 perguntas básicas da entrevista sobre Java. Se houver alguma pergunta importante da entrevista sobre Java que tenha sido feita a você, por favor, poste-a na seção de perguntas. Garantimos que você receberá aqui 90% das perguntas e respostas mais frequentes das entrevistas.
As respostas às perguntas da entrevista Core Java são curtas e diretas. As principais perguntas da entrevista sobre Java são categorizadas em perguntas da entrevista sobre Noções básicas de Java, perguntas da entrevista OOPs, perguntas da entrevista sobre manipulação de strings, perguntas da entrevista multithreading, perguntas da entrevista de coleção, perguntas da entrevista JDBC, etc.
1 2 3 4 5
Core Java: Noções básicas de perguntas da entrevista sobre Java
1) O que é Java?
Java é o alto nível, Orientado a Objeto , linguagem de programação robusta e segura, independente de plataforma, alto desempenho, multithread e linguagem de programação portátil. Foi desenvolvido por James Gosling em junho de 1991. Também pode ser conhecida como plataforma, pois fornece seu próprio JRE e API.
2) Quais são as diferenças entre C++ e Java?
As diferenças entre C++ e Java são fornecidos na tabela a seguir.
Índice de comparação | C++ | Java |
---|---|---|
Plataforma independente | C++ depende da plataforma. | Java é independente de plataforma. |
Usado principalmente para | C++ é usado principalmente para programação de sistemas. | Java é usado principalmente para programação de aplicativos. É amplamente utilizado em aplicativos de janela, baseados na web, corporativos e móveis. |
Objetivo do projeto | C++ foi projetado para programação de sistemas e aplicativos. Foi uma extensão de Linguagem de programação C . | Java foi projetado e criado como um intérprete para sistemas de impressão, mas posteriormente estendido como suporte à computação em rede. Ele foi projetado com o objetivo de ser fácil de usar e acessível a um público mais amplo. |
Vá para | C++ suporta a instrução goto. | Java não suporta a instrução goto. |
Herança múltipla | C++ oferece suporte a herança múltipla. | Java não suporta herança múltipla por meio de classe. Isso pode ser alcançado por interfaces em java . |
Sobrecarga do Operador | C++ suporta sobrecarga do operador . | Java não suporta sobrecarga de operador. |
Ponteiros | C++ suporta ponteiros. Você pode escrever um programa de ponteiro em C++. | Java suporta ponteiro internamente. No entanto, você não pode escrever o programa ponteiro em java. Isso significa que Java restringiu o suporte a ponteiros em Java. |
Compilador e Interpretador | C++ usa apenas compilador. C++ é compilado e executado usando o compilador que converte o código-fonte em código de máquina, portanto, C++ depende da plataforma. | Java usa compilador e interpretador. O código-fonte Java é convertido em bytecode no momento da compilação. O interpretador executa esse bytecode em tempo de execução e produz uma saída. Java é interpretado por isso é independente de plataforma. |
Chamada por Valor e Chamada por Referência | C++ suporta chamada por valor e chamada por referência. | Java suporta chamadas apenas por valor. Não há chamada por referência em java. |
Estrutura e União | C++ oferece suporte a estruturas e uniões. | Java não oferece suporte a estruturas e uniões. |
Suporte a tópicos | C++ não possui suporte integrado para threads. Ele depende de bibliotecas de terceiros para suporte a threads. | Java tem embutido fio apoiar. |
Comentário da documentação | C++ não oferece suporte a comentários de documentação. | Java suporta comentários de documentação (/** ... */) para criar documentação para código-fonte Java. |
Palavra-chave virtual | C++ oferece suporte a palavras-chave virtuais para que possamos decidir se substituiremos ou não uma função. | Java não possui palavra-chave virtual. Podemos substituir todos os métodos não estáticos por padrão. Em outras palavras, os métodos não estáticos são virtuais por padrão. |
deslocamento para a direita sem sinal >>> | C++ não oferece suporte ao operador >>>. | Java suporta o operador de deslocamento para a direita >>> sem sinal que preenche zero na parte superior para os números negativos. Para números positivos, funciona da mesma forma que o operador >>. |
Árvore de herança | C++ sempre cria uma nova árvore de herança. | Java sempre usa uma única árvore de herança porque todas as classes são filhas da classe Object em java. A classe do objeto é a raiz do herança árvore em java. |
Hardware | C++ está mais próximo do hardware. | Java não é tão interativo com hardware. |
Orientado a Objeto | C++ é uma linguagem orientada a objetos. No entanto, na linguagem C, a hierarquia de raiz única não é possível. | Java também é um Orientado a Objeto linguagem. No entanto, tudo (exceto os tipos fundamentais) é um objeto em Java. É uma hierarquia de raiz única, pois tudo é derivado de java.lang.Object. |
3) Liste os recursos da linguagem de programação Java.
Existem os seguintes recursos na linguagem de programação Java.
4) O que você entende por máquina virtual Java?
Máquina Virtual JAVA é uma máquina virtual que permite ao computador executar o programa Java. A JVM atua como um mecanismo de tempo de execução que chama o método principal presente no código Java. JVM é a especificação que deve ser implementada no sistema de computador. O código Java é compilado pela JVM para ser um Bytecode independente da máquina e próximo ao código nativo.
5) Qual é a diferença entre JDK, JRE e JVM?
JVM
JVM é um acrônimo para Java Virtual Machine; é uma máquina abstrata que fornece o ambiente de execução no qual o bytecode Java pode ser executado. É uma especificação que especifica o funcionamento da Java Virtual Machine. Sua implementação foi fornecida pela Oracle e outras empresas. Sua implementação é conhecida como JRE.
As JVMs estão disponíveis para muitas plataformas de hardware e software (portanto, a JVM depende da plataforma). É uma instância de tempo de execução criada quando executamos a classe Java. Existem três noções de JVM: especificação, implementação e instância.
JRE
JRE significa Java Runtime Environment. É a implementação da JVM. O Java Runtime Environment é um conjunto de ferramentas de software usadas para desenvolver aplicativos Java. Ele é usado para fornecer o ambiente de tempo de execução. É a implementação da JVM. Ele existe fisicamente. Ele contém um conjunto de bibliotecas + outros arquivos que a JVM usa em tempo de execução.
JDK
JDK é um acrônimo para Java Development Kit. É um ambiente de desenvolvimento de software usado para desenvolver aplicativos e miniaplicativos Java. Ele existe fisicamente. Ele contém ferramentas de desenvolvimento JRE +. JDK é uma implementação de qualquer uma das plataformas Java abaixo, lançadas pela Oracle Corporation:
- Plataforma Java Edição Padrão
- Plataforma Java Edição Empresarial
- Plataforma Java Micro Edição
6) Quantos tipos de áreas de memória são alocadas pela JVM?
Muitos tipos:
7) O que é compilador JIT?
Compilador Just-In-Time (JIT): É usado para melhorar o desempenho. O JIT compila partes do bytecode que possuem funcionalidade semelhante ao mesmo tempo e, portanto, reduz a quantidade de tempo necessária para compilação. Aqui, o termo compilador refere-se a um tradutor do conjunto de instruções de uma máquina virtual Java (JVM) para o conjunto de instruções de uma CPU específica.
8) Qual é a plataforma?
Uma plataforma é o ambiente de hardware ou software no qual um software é executado. Existem dois tipos de plataformas, baseadas em software e baseadas em hardware. Java fornece a plataforma baseada em software.
9) Quais as principais diferenças entre a plataforma Java e outras plataformas?
Existem as seguintes diferenças entre a plataforma Java e outras plataformas.
- Java é a plataforma baseada em software, enquanto outras plataformas podem ser plataformas de hardware ou plataformas baseadas em software.
- Java é executado no topo de outras plataformas de hardware, enquanto outras plataformas só podem ter componentes de hardware.
10) O que dá ao Java a natureza de 'escrever uma vez e executar em qualquer lugar'?
O bytecódigo. O compilador Java converte os programas Java no arquivo de classe (Byte Code), que é a linguagem intermediária entre o código-fonte e o código de máquina. Este bytecode não é específico da plataforma e pode ser executado em qualquer computador.
11) O que é carregador de classe?
Classloader é um subsistema da JVM que é usado para carregar arquivos de classe. Sempre que executamos o programa java, ele é carregado primeiro pelo carregador de classe. Existem três carregadores de classe integrados em Java.
12) O nome do arquivo .java vazio é um nome de arquivo de origem válido?
Sim, Java permite salvar nosso arquivo java .Java apenas, precisamos compilá-lo por javac.java e correr por nome da classe java Vejamos um exemplo simples:
//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
compilá-lo por javac.java
execute-o Java A
13) A palavra-chave delete, next, main, exit ou null está em java?
Não.
14) Se eu não fornecer nenhum argumento na linha de comando, qual será o valor armazenado no array String passado para o método main(), vazio ou NULL?
Está vazio, mas não nulo.
15) E se eu escrever static public void em vez de public static void?
O programa é compilado e executado corretamente porque a ordem dos especificadores não importa em Java.
16) Qual é o valor padrão das variáveis locais?
As variáveis locais não são inicializadas com nenhum valor padrão, nem primitivas nem referências de objetos.
17) Quais são os vários especificadores de acesso em Java?
Em Java, especificadores de acesso são palavras-chave usadas para definir o escopo de acesso do método, classe ou variável. Em Java, existem quatro especificadores de acesso fornecidos a seguir.
18) Qual é a finalidade dos métodos e variáveis estáticos?
Os métodos ou variáveis definidos como estáticos são compartilhados entre todos os objetos da classe. A estática faz parte da classe e não do objeto. As variáveis estáticas são armazenadas na área da classe e não precisamos criar o objeto para acessar tais variáveis. Portanto, static é utilizado no caso em que precisamos definir variáveis ou métodos comuns a todos os objetos da classe.
Por exemplo, na aula que simula a coleção dos alunos de uma faculdade, o nome da faculdade é o atributo comum a todos os alunos. Portanto, o nome da faculdade será definido como estático .
19) Quais são as vantagens dos Pacotes em Java?
Existem várias vantagens em definir pacotes em Java.
- Os pacotes evitam conflitos de nomes.
- O pacote fornece controle de acesso mais fácil.
- Também podemos ter classes ocultas que não são visíveis fora e usadas pelo pacote.
- É mais fácil localizar as classes relacionadas.
20) Qual é a saída do seguinte programa Java?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
A saída do código acima será
30Javatpoint Javatpoint1020
Explicação
No primeiro caso, 10 e 20 são tratados como números e somados para dar 30. Agora, sua soma 30 é tratada como a string e concatenada com a string Ponto Java . Portanto, a saída será 30Javatpoint .
No segundo caso, a string Javatpoint é concatenada com 10 para ser a string Javatpoint10 que será então concatenado com 20 para ser Javatpoint1020 .
21) Qual é a saída do seguinte programa Java?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
A saída do código acima será
200Javatpoint Javatpoint200
Explicação
No primeiro caso, os números 10 e 20 serão multiplicados primeiro e depois o resultado 200 será tratado como string e concatenado com a string Ponto Java para produzir a saída 200Javatpoint .
No segundo caso, os números 10 e 20 serão multiplicados primeiro por 200 porque a precedência da multiplicação é maior que a adição. O resultado 200 será tratado como string e concatenado com a string Ponto Java para produzir a saída como Javatpoint200 .
22) Qual é a saída do seguinte programa Java?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
O código acima apresentará o erro em tempo de compilação porque o loop for exige um valor booleano na segunda parte e estamos fornecendo um valor inteiro, ou seja, 0.
Core Java - Conceitos de OOPs: Perguntas iniciais da entrevista sobre OOPs
São fornecidas mais de 50 perguntas de entrevista sobre OOPs (Programação e Sistema Orientados a Objetos). No entanto, eles foram categorizados em muitas seções, como perguntas da entrevista do construtor, perguntas da entrevista estática, perguntas da entrevista de herança, perguntas da entrevista de abstração, perguntas da entrevista de polimorfismo, etc.
23) O que é paradigma orientado a objetos?
É um paradigma de programação baseado em objetos que possuem dados e métodos definidos na classe a que pertence. O paradigma orientado a objetos visa incorporar as vantagens da modularidade e da reutilização. Objetos são instâncias de classes que interagem entre si para projetar aplicativos e programas. Existem os seguintes recursos do paradigma orientado a objetos.
- Segue a abordagem ascendente na concepção do programa.
- Concentre-se nos dados com métodos para operar nos dados do objeto
- Inclui conceitos como encapsulamento e abstração que escondem as complexidades do usuário e mostram apenas funcionalidade.
- Implementa a abordagem em tempo real como herança, abstração, etc.
- Os exemplos do paradigma orientado a objetos são C++, Simula, Smalltalk, Python, C#, etc.
24) O que é um objeto?
O Objeto é a entidade em tempo real que possui algum estado e comportamento. Em Java, Object é uma instância da classe tendo as variáveis de instância como o estado do objeto e os métodos como o comportamento do objeto. O objeto de uma classe pode ser criado usando o novo palavra-chave.
25) Qual é a diferença entre uma linguagem de programação orientada a objetos e uma linguagem de programação baseada em objetos?
Existem as seguintes diferenças básicas entre a linguagem orientada a objetos e a linguagem baseada em objetos.
- As linguagens orientadas a objetos seguem todos os conceitos de OOPs, enquanto a linguagem baseada em objetos não segue todos os conceitos de OOPs, como herança e polimorfismo.
- As linguagens orientadas a objetos não possuem objetos embutidos, enquanto as linguagens baseadas em objetos possuem os objetos embutidos, por exemplo, JavaScript possui o objeto de janela.
- Exemplos de programação orientada a objetos são Java, C#, Smalltalk, etc. enquanto os exemplos de linguagens baseadas em objetos são JavaScript, VBScript, etc.
26) Qual será o valor inicial de uma referência de objeto que é definida como uma variável de instância?
Todas as referências de objetos são inicializadas como nulas em Java.
Core Java - Conceitos OOPs: Perguntas da entrevista do construtor
27) Qual é o construtor?
O construtor pode ser definido como o tipo especial de método usado para inicializar o estado de um objeto. É invocado quando a classe é instanciada e a memória é alocada para o objeto. Cada vez que um objeto é criado usando o novo palavra-chave, o construtor padrão da classe é chamado. O nome do construtor deve ser semelhante ao nome da classe. O construtor não deve ter um tipo de retorno explícito.
Mais detalhes.28) Quantos tipos de construtores são usados em Java?
Com base nos parâmetros passados nos construtores, existem dois tipos de construtores em Java.
29) Qual é a finalidade de um construtor padrão?
O objetivo do construtor padrão é atribuir o valor padrão aos objetos. O compilador java cria um construtor padrão implicitamente se não houver nenhum construtor na classe.
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(); } }Teste agora
Saída:
0 null 0 null
Explicação: Na classe acima, você não está criando nenhum construtor, então o compilador fornece um construtor padrão. Aqui os valores 0 e nulo são fornecidos pelo construtor padrão.
Mais detalhes.
30) O construtor retorna algum valor?
Anos: sim, o construtor retorna implicitamente a instância atual da classe (você não pode usar um tipo de retorno explícito com o construtor). Mais detalhes.
31) O construtor é herdado?
Não, o construtor não é herdado.
32) Você consegue tornar um construtor final?
Não, o construtor não pode ser final.
preidade zinta
33) Podemos sobrecarregar os construtores?
Sim, os construtores podem ser sobrecarregados alterando o número de argumentos aceitos pelo construtor ou alterando o tipo de dados dos parâmetros. Considere o seguinte exemplo.
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); } }
No programa acima, o construtor Test está sobrecarregado com outro construtor. Na primeira chamada ao construtor, o construtor com um argumento é chamado, e i será inicializado com o valor 10. Porém, na segunda chamada ao construtor, o construtor com os 2 argumentos é chamado, e i será inicializado com o valor 15.
34) O que você entende por construtor de cópia em Java?
Não há construtor de cópia em java. No entanto, podemos copiar os valores de um objeto para outro como o construtor de cópia em C++.
Existem muitas maneiras de copiar os valores de um objeto para outro em java. Eles são:
- Por construtor
- Ao atribuir os valores de um objeto a outro
- Pelo método clone() da classe Object
Neste exemplo, copiaremos os valores de um objeto para outro usando o construtor 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(); } }Teste agora
Saída:
111 Karan 111 Karan
35) Quais são as diferenças entre os construtores e métodos?
Existem muitas diferenças entre construtores e métodos. Eles são fornecidos abaixo.
Construtor Java | Método Java |
---|---|
Um construtor é usado para inicializar o estado de um objeto. | Um método é usado para expor o comportamento de um objeto. |
Um construtor não deve ter um tipo de retorno. | Um método deve ter um tipo de retorno. |
O construtor é invocado implicitamente. | O método é invocado explicitamente. |
O compilador Java fornece um construtor padrão se você não tiver nenhum construtor em uma classe. | O método não é fornecido pelo compilador em nenhum caso. |
O nome do construtor deve ser igual ao nome da classe. | O nome do método pode ou não ser igual ao nome da classe. |
36) Qual é a saída do seguinte 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); } }
A saída do seguinte programa é:
a = 10 b = 15
Aqui, o tipo de dados das variáveis aeb, ou seja, byte, é promovido para int, e o primeiro construtor parametrizado com os dois parâmetros inteiros é chamado.
37) Qual é a saída do seguinte programa Java?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
A saída do programa é 0 porque a variável i é inicializada com 0 internamente. Como sabemos que um construtor padrão é invocado implicitamente se não houver construtor na classe, a variável i é inicializada com 0, pois não há construtor na classe.
38) Qual é a saída do seguinte 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); } }
Existe um erro do compilador no programa porque há uma chamada ao construtor padrão no método principal que não está presente na classe. No entanto, existe apenas um construtor parametrizado na classe Test. Portanto, nenhum construtor padrão é invocado implicitamente pelo construtor.
Core Java - Conceitos OOPs: perguntas de entrevista de palavras-chave estáticas
39) Qual é a variável estática?
A variável estática é usada para se referir à propriedade comum de todos os objetos (que não é exclusiva para cada objeto), por exemplo, o nome da empresa dos funcionários, o nome da faculdade dos alunos, etc. A variável estática obtém memória apenas uma vez na área da classe em o momento do carregamento da aula. Usar uma variável estática torna seu programa mais eficiente em termos de memória (economiza memória). A variável estática pertence à classe e não ao 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(); } }Teste agora
Output:111 Karan ITS 222 Aryan ITS
Mais detalhes.
40) Qual é o método estático?
- Um método estático pertence à classe e não ao objeto.
- Não há necessidade de criar o objeto para chamar os métodos estáticos.
- Um método estático pode acessar e alterar o valor da variável estática.
41) Quais são as restrições aplicadas aos métodos estáticos Java?
Duas restrições principais são aplicadas aos métodos estáticos.
- O método estático não pode usar membros de dados não estáticos ou chamar o método não estático diretamente.
- this e super não podem ser usados em contexto estático, pois não são estáticos.
42) Por que o método principal é estático?
Porque o objeto não é obrigado a chamar o método estático. Se tornarmos o método principal não estático, a JVM terá que criar seu objeto primeiro e depois chamar o método main() que levará à alocação de memória extra. Mais detalhes.
43) Podemos substituir os métodos estáticos?
Não, não podemos substituir métodos estáticos.
44) O que é o bloco estático?
O bloco estático é usado para inicializar o membro de dados estáticos. É executado antes do método principal, no momento do carregamento da classe.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Teste agora
Output: static block is invoked Hello main
Mais detalhes.
45) Podemos executar um programa sem o método main()?
Resposta) Não, antes do JDK 1.7 era possível usar o bloco estático. Desde o JDK 1.7, isso não é possível. Mais detalhes.
46) E se o modificador estático for removido da assinatura do método principal?
O programa compila. No entanto, em tempo de execução, gera um erro 'NoSuchMethodError.'
47) Qual é a diferença entre método estático (classe) e método de instância?
método estático ou de classe | método de instância |
---|---|
1) Um método declarado como estático é conhecido como método estático. | Um método que não é declarado como estático é conhecido como método de instância. |
2) Não precisamos criar os objetos para chamar os métodos estáticos. | O objeto é necessário para chamar os métodos de instância. |
3) Membros não estáticos (instância) não podem ser acessados diretamente no contexto estático (método estático, bloco estático e classe aninhada estática). | Variáveis estáticas e não estáticas podem ser acessadas em métodos de instância. |
4)Por exemplo: public static int cube(int n){ return n*n*n;} | Por exemplo: public void msg(){...}. |
48) Podemos tornar os construtores estáticos?
Como sabemos que o contexto estático (método, bloco ou variável) pertence à classe, não ao objeto. Como os construtores são invocados apenas quando o objeto é criado, não faz sentido torná-los estáticos. No entanto, se você tentar fazer isso, o compilador mostrará o erro do compilador.
49) Podemos tornar estáticos os métodos abstratos em Java?
Em Java, se tornarmos estáticos os métodos abstratos, eles se tornarão parte da classe e poderemos chamá-los diretamente, o que é desnecessário. Chamar um método indefinido é completamente inútil, portanto não é permitido.
50) Podemos declarar as variáveis e métodos estáticos em uma classe abstrata?
Sim, podemos declarar variáveis e métodos estáticos em um método abstrato. Como sabemos que não há necessidade de fazer com que o objeto acesse o contexto estático, portanto, podemos acessar o contexto estático declarado dentro da classe abstrata usando o nome da classe abstrata. Considere o seguinte exemplo.
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); } }
Saída
hi !! I am good !! i = 102
Core Java - Conceitos OOPs: Perguntas da entrevista sobre herança
51) O que é esse palavra-chave em java?
O esse palavra-chave é uma variável de referência que se refere ao objeto atual. Existem vários usos desta palavra-chave em Java. Pode ser usado para se referir às propriedades da classe atual, como métodos de instância, variáveis, construtores, etc. Também pode ser passado como um argumento para os métodos ou construtores. Também pode ser retornado do método como a instância da classe atual.
Mais detalhes.
52) Quais são os principais usos desta palavra-chave?
Existem os seguintes usos de esse palavra-chave.
53) Podemos atribuir a referência a esse variável?
Não, não pode ser atribuído a nenhum valor porque sempre aponta para o objeto da classe atual e esta é a referência final em Java. Porém, se tentarmos fazer isso, o erro do compilador será mostrado. Considere o seguinte exemplo.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Saída
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Pode esse palavra-chave pode ser usada para referir membros estáticos?
Sim, é possível usar esta palavra-chave para referir-se a membros estáticos porque esta é apenas uma variável de referência que se refere ao objeto da classe atual. Porém, como sabemos, é desnecessário acessar variáveis estáticas através de objetos, portanto, não é a melhor prática utilizar isso para referir membros estáticos. Considere o seguinte exemplo.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Saída
10
55) Como o encadeamento de construtores pode ser feito usando esta palavra-chave?
O encadeamento de construtores nos permite chamar um construtor de outro construtor da classe em relação ao objeto da classe atual. Podemos usar esta palavra-chave para realizar o encadeamento de construtores dentro da mesma classe. Considere o exemplo a seguir que ilustra como podemos usar esta palavra-chave para obter o encadeamento de construtores.
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); } }
Saída
ID: 105 Name:Vikas age:22 address: Delhi
56) Quais são as vantagens de passar isso para um método em vez do próprio objeto da classe atual?
Como sabemos, isso se refere ao objeto da classe atual, portanto, deve ser semelhante ao objeto da classe atual. No entanto, pode haver duas vantagens principais em passar isso para um método em vez do objeto da classe atual.
- esta é uma variável final. Portanto, isso não pode ser atribuído a nenhum novo valor, enquanto o objeto da classe atual pode não ser final e pode ser alterado.
- isso pode ser usado no bloco sincronizado.
57) O que é a Herança?
Herança é um mecanismo pelo qual um objeto adquire todas as propriedades e comportamento de outro objeto de outra classe. É usado para reutilização de código e substituição de método. A ideia por trás da herança em Java é que você pode criar novas classes construídas sobre classes existentes. Ao herdar de uma classe existente, você pode reutilizar métodos e campos da classe pai. Além disso, você também pode adicionar novos métodos e campos em sua classe atual. A herança representa o relacionamento IS-A, também conhecido como relacionamento pai-filho.
Existem cinco tipos de herança em Java.
- Herança de nível único
- Herança multinível
- Herança Múltipla
- Herança Hierárquica
- Herança Híbrida
Herança múltipla não é suportada em Java por meio de classe.
Mais detalhes.58) Por que a herança é usada em Java?
Existem várias vantagens de usar herança em Java, fornecidas a seguir.
- A herança fornece capacidade de reutilização de código. A classe derivada não precisa redefinir o método da classe base, a menos que precise fornecer a implementação específica do método.
- O polimorfismo de tempo de execução não pode ser alcançado sem o uso de herança.
- Podemos simular a herança de classes com objetos em tempo real, o que torna os OOPs mais realistas.
- A herança fornece ocultação de dados. A classe base pode ocultar alguns dados da classe derivada, tornando-os privados.
- A substituição de método não pode ser alcançada sem herança. Pela substituição de método, podemos fornecer uma implementação específica de algum método básico contido na classe base.
59) Qual classe é a superclasse para todas as classes?
A classe de objeto é a superclasse de todas as outras classes em Java.
60) Por que herança múltipla não é suportada em java?
Para reduzir a complexidade e simplificar a linguagem, a herança múltipla não é suportada em java. Considere um cenário onde A, B e C são três classes. A classe C herda as classes A e B. Se as classes A e B tiverem o mesmo método e você o chamar do objeto da classe filho, haverá ambigüidade para chamar o método da classe A ou B.
Como os erros em tempo de compilação são melhores que os erros em tempo de execução, Java renderiza erros em tempo de compilação se você herdar 2 classes. Portanto, quer você tenha o mesmo método ou diferente, haverá um erro de tempo de compilação.
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? } }Teste agora
Compile Time Error
61) O que é agregação?
A agregação pode ser definida como o relacionamento entre duas classes em que a classe agregada contém uma referência à classe que possui. A agregação é melhor descrita como tem um relação. Por exemplo, a classe agregada Funcionário com vários campos, como idade, nome e salário, também contém um objeto da classe Endereço com vários campos, como Linha de Endereço 1, Cidade, Estado e código PIN. Em outras palavras, podemos dizer que Employee (classe) possui um objeto da classe Address. Considere o seguinte exemplo.
Endereço.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; } }
Funcionário.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(); } }
Saída
111 varun gzb UP india 112 arun gno UP india
62) O que é composição?
Manter a referência de uma classe dentro de alguma outra classe é conhecido como composição. Quando um objeto contém outro objeto, se o objeto contido não pode existir sem a existência do objeto contêiner, então ele é chamado de composição. Em outras palavras, podemos dizer que a composição é o caso particular de agregação que representa uma relação mais forte entre dois objetos. Exemplo: Uma turma contém alunos. Um aluno não pode existir sem uma aula. Existe composição entre turma e alunos.
63) Qual é a diferença entre agregação e composição?
A agregação representa o relacionamento fraco, enquanto a composição representa o relacionamento forte. Por exemplo, a bicicleta tem um indicador (agregação), mas a bicicleta tem um motor (composição).
64) Por que Java não suporta ponteiros?
O ponteiro é uma variável que se refere ao endereço da memória. Eles não são usados em Java porque são inseguros (inseguros) e complexos de entender.
65) O que é super em java?
O super palavra-chave em Java é uma variável de referência usada para se referir ao objeto de classe pai imediato. Sempre que você cria a instância da subclasse, uma instância da classe pai é criada implicitamente, a qual é referida pela variável de superreferência. O super() é chamado implicitamente no construtor da classe pelo compilador se não houver super ou 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(); } }Teste agora
Saída:
animal is created dog is createdMais detalhes.
66) Como o encadeamento de construtores pode ser feito usando a palavra-chave 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); } }
Saída
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) Quais são os principais usos da super palavra-chave?
Existem os seguintes usos da super palavra-chave.
- super pode ser usado para se referir à variável de instância da classe pai imediata.
- super pode ser usado para invocar o método da classe pai imediato.
- super() pode ser usado para invocar o construtor da classe pai imediato.
68) Quais são as diferenças entre esta e a super palavra-chave?
Existem as seguintes diferenças entre esta e a super palavra-chave.
- A palavra-chave super sempre aponta para os contextos da classe pai, enquanto esta palavra-chave sempre aponta para o contexto da classe atual.
- A palavra-chave super é usada principalmente para inicializar as variáveis da classe base dentro do construtor da classe derivada, enquanto esta palavra-chave é usada principalmente para diferenciar entre variáveis locais e de instância quando passada no construtor da classe.
- O super e esta devem ser a primeira instrução dentro do construtor, caso contrário o compilador gerará um erro.
69) Qual é a saída do seguinte 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(); } }
Saída
Person class constructor called Employee class constructor called
Explicação
O super() é invocado implicitamente pelo compilador se nenhum super() ou this() for incluído explicitamente no construtor da classe derivada. Portanto, neste caso, o construtor da classe Person é chamado primeiro e depois o construtor da classe Employee é chamado.
70) Você pode usar this() e super() em um construtor?
Não, porque this() e super() devem ser a primeira instrução no construtor da classe.
Exemplo:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Saída:
Test.java:5: error: call to this must be first statement in constructor
71)O que é clonagem de objetos?
A clonagem de objetos é usada para criar a cópia exata de um objeto. O método clone() da classe Object é usado para clonar um objeto. O java.lang.Cloneable interface deve ser implementada pela classe cujo clone do objeto queremos criar. Se não implementarmos a interface Cloneable, o método clone() gera CloneNotSupportedException.
protected Object clone() throws CloneNotSupportedExceptionMais detalhes.
Core Java - Conceitos OOPs: Perguntas da entrevista sobre sobrecarga de método
72) O que é sobrecarga de método?
A sobrecarga de métodos é a técnica de polimorfismo que nos permite criar vários métodos com o mesmo nome, mas com assinaturas diferentes. Podemos conseguir a sobrecarga de métodos de duas maneiras.
- Alterando o número de argumentos
- Alterando o tipo de dados dos argumentos
A sobrecarga de método aumenta a legibilidade do programa. A sobrecarga do método é executada para descobrir o programa rapidamente.
Mais detalhes.73) Por que a sobrecarga do método não é possível alterando o tipo de retorno em java?
Em Java, a sobrecarga de métodos não é possível alterando o tipo de retorno do programa para evitar ambiguidade.
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 }}Teste agora
Saída:
Compile Time Error: method add(int, int) is already defined in class AdderMais detalhes.
74) Podemos sobrecarregar os métodos tornando-os estáticos?
Não, não podemos sobrecarregar os métodos apenas aplicando a palavra-chave estática a eles (o número de parâmetros e tipos são iguais). Considere o seguinte exemplo.
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); } }
Saída
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 sobrecarregar o método main()?
Sim, podemos ter qualquer número de métodos principais em um programa Java usando sobrecarga de métodos.
Mais detalhes.76) O que é sobrecarga de método com promoção de tipo?
Por promoção de tipo é uma sobrecarga de método, queremos dizer que um tipo de dados pode ser promovido para outro implicitamente se nenhuma correspondência exata for encontrada.
Conforme exibido no diagrama acima, o byte pode ser promovido para short, int, long, float ou double. O tipo de dados short pode ser promovido para int, long, float ou double. O tipo de dados char pode ser promovido para int, long, float ou double e assim por diante. Considere o seguinte exemplo.
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); } }Teste agora
Saída
40 60
77) Qual é a saída do seguinte 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 } }
Saída
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
Explicação
Existem dois métodos definidos com o mesmo nome, ou seja, soma. O primeiro método aceita o tipo inteiro e longo, enquanto o segundo método aceita o tipo longo e inteiro. Os parâmetros passados são a = 20, b = 20. Não podemos dizer qual método será chamado, pois não há uma diferenciação clara mencionada entre literal inteiro e literal longo. Este é o caso da ambiguidade. Portanto, o compilador gerará um erro.
Core Java - Conceitos OOPs: Perguntas de entrevista sobre substituição de método
78) O que é substituição de método:
Se uma subclasse fornece uma implementação específica de um método que já é fornecido por sua classe pai, isso é conhecido como Substituição de Método. É usado para polimorfismo de tempo de execução e para implementar os métodos de interface.
Regras para substituição de método
- O método deve ter o mesmo nome da classe pai.
- O método deve ter a mesma assinatura da classe pai.
- Duas classes devem ter um relacionamento IS-A entre elas.
79) Podemos substituir o método estático?
Não, você não pode substituir o método estático porque eles fazem parte da classe, não do objeto.
80) Por que não podemos substituir o método estático?
É porque o método estático faz parte da classe e está vinculado à classe, enquanto o método de instância está vinculado ao objeto, e o estático obtém memória na área da classe e a instância obtém memória em um heap.
81) Podemos substituir o método sobrecarregado?
Sim.
82) Diferença entre sobrecarga e substituição de método.
Sobrecarga de método | Substituição de método |
---|---|
1) A sobrecarga do método aumenta a legibilidade do programa. | A substituição de método fornece a implementação específica do método que já é fornecido por sua superclasse. |
2) A sobrecarga do método ocorre dentro da classe. | A substituição de método ocorre em duas classes que possuem relacionamento IS-A entre elas. |
3) Neste caso os parâmetros devem ser diferentes. | Neste caso, os parâmetros devem ser iguais. |
83) Podemos substituir os métodos privados?
Não, não podemos substituir os métodos privados porque o escopo dos métodos privados é limitado à classe e não podemos acessá-los fora da classe.
84) Podemos alterar o escopo do método substituído na subclasse?
Sim, podemos alterar o escopo do método substituído na subclasse. Porém, devemos notar que não podemos diminuir a acessibilidade do método. O ponto a seguir deve ser observado ao alterar a acessibilidade do método.
- O privado pode ser alterado para protegido, público ou padrão.
- O protegido pode ser alterado para público ou padrão.
- O padrão pode ser alterado para público.
- O público sempre permanecerá público.
85) Podemos modificar a cláusula throws do método da superclasse enquanto a substituímos na subclasse?
Sim, podemos modificar a cláusula throws do método da superclasse enquanto a substituímos na subclasse. No entanto, existem algumas regras que devem ser seguidas durante a substituição em caso de tratamento de exceções.
- Se o método da superclasse não declarar uma exceção, o método substituído pela subclasse não poderá declarar a exceção verificada, mas poderá declarar a exceção não verificada.
- Se o método da superclasse declarar uma exceção, o método substituído pela subclasse pode declarar a mesma exceção da subclasse ou nenhuma exceção, mas não pode declarar a exceção pai.
86) Qual é a saída do seguinte 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); } }
Saída
Base class method called with integer a = 10
Explicação
O método() está sobrecarregado na classe Base enquanto é derivado na classe Derived com o tipo double como parâmetro. Na chamada do método, o número inteiro é passado.
87) Você pode ter funções virtuais em Java?
Sim, todas as funções em Java são virtuais por padrão.
88) Qual é o tipo de retorno covariante?
Agora, desde java5, é possível substituir qualquer método alterando o tipo de retorno se o tipo de retorno do método de substituição da subclasse for do tipo subclasse. É conhecido como tipo de retorno covariante. O tipo de retorno covariante especifica que o tipo de retorno pode variar na mesma direção que a subclasse.
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(); } }Teste agora
Output: welcome to covariant return typeMais detalhes.
89) Qual é a saída do seguinte 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(); } }
Saída
Derived method called ...
Explicação
O método da classe Base, ou seja, baseMethod() é substituído na classe Derived. Na classe Teste, a variável de referência b (do tipo Classe Base) refere-se à instância da classe Derivada. Aqui, o polimorfismo de tempo de execução é alcançado entre as classes Base e Derivada. Em tempo de compilação, a presença do método baseMethod é verificada na classe Base. Se houver, o programa compilou, caso contrário será mostrado o erro do compilador. Neste caso, baseMethod está presente na classe Base; portanto, ele foi compilado com sucesso. No entanto, em tempo de execução, ele verifica se o baseMethod foi substituído pela classe Derived; em caso afirmativo, o método da classe Derived é chamado, caso contrário, o método da classe Base é chamado. Nesse caso, a classe Derived substitui o baseMethod; portanto, o método da classe derivada é chamado.
Core Java - Conceitos OOPs: perguntas finais da entrevista com palavras-chave
90) Qual é a variável final?
Em Java, a variável final é usada para impedir que o usuário a atualize. Se inicializarmos a variável final, não poderemos alterar seu valor. Em outras palavras, podemos dizer que a variável final, uma vez atribuída a um valor, nunca mais poderá ser alterada depois disso. A variável final que não está atribuída a nenhum valor só pode ser atribuída através do construtor da classe.
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 classTeste agora
Output:Compile Time ErrorMais detalhes.
91) Qual é o método final?
Se alterarmos qualquer método para um método final, não poderemos substituí-lo. Mais detalhes.
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(); } }Teste agora
Output:Compile Time Error
92) Qual é a aula final?
Se tornarmos qualquer classe final, não poderemos herdá-la em nenhuma das subclasses.
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(); } }Teste agora
Output:Compile Time ErrorMais detalhes.
93) Qual é a variável em branco final?
Uma variável final, não inicializada no momento da declaração, é conhecida como variável final em branco. Não podemos inicializar a variável em branco final diretamente. Em vez disso, temos que inicializá-lo usando o construtor da classe. É útil no caso em que o usuário possui alguns dados que não devem ser alterados por outros, por exemplo, Número PAN. Considere o seguinte exemplo:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }Mais detalhes.
94) Podemos inicializar a variável em branco final?
Sim, se não for estático, podemos inicializá-lo no construtor. Se for uma variável final estática em branco, ela poderá ser inicializada apenas no bloco estático. Mais detalhes.
95) Você pode declarar o método principal como final?
Sim, podemos declarar o método principal como public static final void main(String[] args){}.
96) Qual é a saída do seguinte programa Java?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Saída
20
Explicação
Já que i é a variável final em branco. Ele pode ser inicializado apenas uma vez. Inicializamos para 20. Portanto, 20 será impresso.
97) Qual é a saída do seguinte 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(); } }
Saída
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Explicação
O método getDetails() é final; portanto, não pode ser substituído na subclasse.
98) Podemos declarar um construtor como final?
O construtor nunca pode ser declarado como final porque nunca é herdado. Os construtores não são métodos comuns; portanto, não faz sentido declarar os construtores como finais. No entanto, se você tentar fazer isso, o compilador gerará um erro.
99) Podemos declarar uma interface como final?
Não, não podemos declarar uma interface como final porque a interface deve ser implementada por alguma classe para fornecer sua definição. Portanto, não faz sentido tornar uma interface definitiva. Porém, se você tentar fazer isso, o compilador mostrará um erro.
100) Qual é a diferença entre o método final e o método abstrato?
A principal diferença entre o método final e o método abstrato é que o método abstrato não pode ser final, pois precisamos substituí-los na subclasse para dar sua definição.