Perguntas de entrevista de Java Core ajudam você a se preparar para entrevistas baseadas em Java. Seja você um recém-formado ou um profissional altamente experiente, o Java Core desempenha um papel vital em qualquer entrevista de Java/JEE.
O Java Core é a área favorita na maioria das entrevistas e desempenha um papel crucial na decisão do resultado de sua entrevista.
Esta postagem vem diretamente dos meus mais de 14 anos de programação em Java e muita experiência em entrevistas. O Java 16 foi lançado recentemente e atualizei a postagem para incluir algumas das perguntas das versões mais recentes.
Perguntas e Respostas de Entrevista de Java Core
I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.
- Perguntas de Entrevista de String Java
- Perguntas de Entrevista de Thread Java
- Perguntas de Entrevista de Coleções Java
- Perguntas de Entrevista de Exceção Java
Aqui estou fornecendo algumas das importantes perguntas de entrevista de núcleo Java com respostas que você deve saber. Você pode marcar esta postagem para revisar seu conhecimento antes de ir para uma entrevista.
1. Nomeie algumas características importantes do lançamento do Java 14?
O Java 14 foi lançado em 17 de março de 2020. É uma versão Não-LTS. Algumas das especificidades do desenvolvedor Características do Java 14 são:
- Expressões Switch – JEP 361
- Melhorias de correspondência de padrões do operador instanceof – Feature Preview, JEP 305
- Mensagens de NullPointerException úteis – JEP 358
- Blocos de texto – Segunda prévia, JEP 368
- Records – classe de dados, recurso de prévia, JEP 359.
2. Nomeie algumas características importantes do lançamento do Java 13?
O Java 13 foi lançado em 17 de setembro de 2019. É uma versão Não-LTS. Algumas das especificidades do desenvolvedor Características do Java 13 são:
- Blocos de texto – Feature Preview, JEP 355
- Troca de Expressões – Recurso de Visualização, JEP 354
- Reimplementação da API de Sockets Java – JEP 353
- Arquivo CDS Dinâmico – JEP 350
- Método FileSystems.newFileSystem()
- Fábricas DOM e SAX com suporte a Namespace
- Suporte Unicode 12.1
- Melhorias no ZGC para devolver Memória Não Utilizada – JEP 351
3. Nomeie algumas características importantes do lançamento do Java 12?
O Java 12 foi lançado em 19 de março de 2019. É uma versão não LTS. Algumas das características do Java 12 são:Alterações na JVM – JEP 189, JEP 346, JEP 344 e JEP 230.
- Expressões de Switch
- Método mismatch() de arquivo
- Formatação Compacta de Números
- Coletor de desvio em API de Fluxo
- Métodos Novos na Classe String
- JEP 334: API de Constantes da JVM
- JEP 305: Correspondência de Padrões para instanceof
- Raw String Literals foi Removido do JDK 12.
4. Quais são as características importantes do lançamento do Java 11?
O Java 11 é o segundo lançamento LTS após o Java 8. Eles alteraram o modelo de licenciamento e suporte, o que significa que se você baixar o Oracle JDK Java 11, será pago para uso comercial. Se você quiser usar uma versão gratuita, pode baixá-la no site do OpenJDK.
Algumas das características importantes do Java 11 são:
- Podemos executar um programa Java diretamente através do comando
java
. O arquivo fonte será implicitamente compilado e executado. Isso faz parte da implementação da funcionalidade JEP 330. - Foram adicionados 6 novos métodos na classe String – isBlank(), lines(), strip(), stripLeading(), stripTrailing() e repeat(). Você pode ler mais sobre eles em nosso artigo sobre a classe String do Java.
- A classe Files recebeu dois novos métodos para ler/escrever dados de string – readString() e writeString().
- Podemos usar “var” também com expressões lambda. Isso faz parte da implementação JEP 323.
- Epsilon: Um Coletor de Lixo No-Op para ambientes de teste. É uma funcionalidade experimental e faz parte do JEP 318.
- Os módulos Java EE e CORBA foram removidos da compilação padrão do JDK. O motor Nashorn JavaScript também foi descontinuado.
- Novo Cliente HTTP (JEP 321) e Gravador de Voo (JEP 328)
Para uma visão completa, por favor, leia Recursos do Java 11.
5. Quais são os recursos importantes do lançamento do Java 10?
O Java 10 é o primeiro de seis em seis meses da Oracle Corporation, então não é um lançamento principal como versões anteriores. No entanto, alguns dos recursos importantes do Java 10 são:
- Inferência de Tipo de Variável Local
- Aprimorar java.util.Locale e APIs relacionadas para implementar extensões adicionais de Unicode de tags de idioma BCP 47.
- Permitir que o HotSpot VM aloque o heap de objetos Java em um dispositivo de memória alternativo, como um NV-DIMM, especificado pelo usuário.
- Fornecer um conjunto padrão de certificados de Autoridade de Certificação (CA) raiz no JDK.
O Java 10 é principalmente uma versão de manutenção, no entanto, eu realmente gostei do recurso de inferência de tipo de variável local. Para uma visão detalhada do Java 10, por favor, consulte Recursos do Java 10.
6. Quais são as características importantes do lançamento do Java 9?
O Java 9 foi um lançamento importante e trouxe muitas características. Algumas das características importantes são:
- Java 9 REPL (JShell)
- Sistema de Módulos do Java 9
- Métodos de Fábrica para Listas, Conjuntos, Mapas e Map.Entry Imutáveis
- Métodos Privados em Interfaces
- Streams Reativos
- Melhorias no Coletor de Lixo (GC)
Você encontrará mais detalhes sobre eles em Recursos do Java 9.
7. Quais são as características importantes do lançamento do Java 8?
O Java 8 foi lançado em março de 2014, então é um dos tópicos quentes nas perguntas de entrevista de Java. Se você responder a esta pergunta claramente, mostrará que gosta de se manter atualizado com as tecnologias mais recentes.
O Java 8 foi um dos maiores lançamentos após as anotações e genéricos do Java 5. Algumas das características importantes do Java 8 são:
- Alterações de interface com métodos padrão e estáticos
- Interfaces funcionais e Expressões Lambda
- API de Stream Java para classes de coleção
- API de Data e Hora Java
I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.
8. Cite alguns Conceitos de POO em Java?
O Java é baseado em Conceitos de Programação Orientada a Objetos, a seguir estão alguns dos conceitos de POO implementados na programação java.
- Abstração
- Encapsulamento
- Polimorfismo
- Herança
- Associação
- Agregação
- Composição
Leia mais sobre eles em Conceitos de POO em Java.
9. O que você quer dizer com independência de plataforma do Java?
Independência de plataforma significa que você pode executar o mesmo programa Java em qualquer sistema operacional. Por exemplo, você pode escrever um programa Java no Windows e executá-lo no macOS.
10. O que é JVM e ela é independente de plataforma?
A Máquina Virtual Java (JVM) é o coração da linguagem de programação Java. A JVM é responsável por converter o código de bytes em código legível para a máquina. A JVM não é independente de plataforma, por isso você tem diferentes JVM para diferentes sistemas operacionais. Podemos personalizar a JVM com Opções Java, como alocar memória mínima e máxima para a JVM. É chamada de virtual porque fornece uma interface que não depende do sistema operacional subjacente.
11. Qual é a diferença entre JDK e JVM?
O Kit de Desenvolvimento Java (JDK) é para fins de desenvolvimento e a JVM é uma parte dele para executar os programas Java.
O JDK fornece todas as ferramentas, executáveis e binários necessários para compilar, depurar e executar um programa Java. A parte de execução é tratada pela JVM para fornecer independência de máquina.
12. Qual é a diferença entre JVM e JRE?
O Ambiente de Execução Java (JRE) é a implementação da JVM. O JRE consiste na JVM e em binários java e outras classes para executar qualquer programa com sucesso. O JRE não contém ferramentas de desenvolvimento como compilador java, depurador, etc. Se você quiser executar qualquer programa Java, deve ter o JRE instalado.
13. Qual classe é a superclasse de todas as classes?
A classe java.lang.Object
é a classe raiz para todas as classes Java e não precisamos estendê-la.
14. Por que o Java não suporta heranças múltiplas?
O Java não suporta herança múltipla em classes por causa do “Problema do Diamante”. Para saber mais sobre o problema do diamante com exemplo, leia Herança Múltipla em Java.
No entanto, heranças múltiplas são suportadas em interfaces. Uma interface pode estender várias interfaces porque elas apenas declaram os métodos e a implementação estará presente na classe que as implementa. Portanto, não há problema do diamante com interfaces.
15. Por que Java não é uma linguagem de programação puramente orientada a objetos?
Java não é considerado puramente orientado a objetos porque suporta tipos primitivos como int, byte, short, long, etc. Acredito que isso traz simplicidade à linguagem ao escrevermos nosso código. Java poderia ter objetos de embrulho para os tipos primitivos, mas apenas para a representação, eles não teriam fornecido nenhum benefício.
Como sabemos, para todos os tipos primitivos, temos classes de embrulho como Integer, Long, etc., que fornecem alguns métodos adicionais.
16. Qual é a diferença entre as variáveis de caminho (path) e de classpath?
O PATH é uma variável de ambiente usada pelo sistema operacional para localizar os executáveis. Por isso, quando instalamos o Java ou desejamos que qualquer executável seja encontrado pelo SO, precisamos adicionar o local do diretório na variável PATH. Se você trabalha no sistema operacional Windows, leia este post para aprender como configurar a variável PATH no Windows.
O Classpath é específico do Java e é utilizado pelos executáveis Java para localizar arquivos de classe. Podemos fornecer o local do classpath ao executar a aplicação Java e pode ser um diretório, arquivos ZIP, arquivos JAR, etc.
17. Qual é a importância do método principal em Java?
O método main() é o ponto de entrada de qualquer aplicação Java independente. A sintaxe do método main é public static void main(String args[])
.
O método main do Java é público e estático para que o tempo de execução do Java possa acessá-lo sem inicializar a classe. O parâmetro de entrada é uma matriz de String através da qual podemos passar argumentos de tempo de execução para o programa Java. Confira este post para aprender como compilar e executar um programa Java.
18. O que é sobrecarga e sobreposição em Java?
Quando temos mais de um método com o mesmo nome em uma única classe, mas os argumentos são diferentes, então é chamado de sobrecarga de método.
O conceito de sobreposição entra em cena com a herança quando temos dois métodos com a mesma assinatura, um na classe pai e outro na classe filha. Podemos usar a anotação @Override no método sobrescrito da classe filha para garantir que se o método da classe pai for alterado, o da classe filha também será.
19. Podemos sobrecarregar o método main()?
Sim, podemos ter vários métodos com o nome “main” em uma única classe. No entanto, se executarmos a classe, o ambiente de execução do Java procurará o método main com a sintaxe como public static void main(String args[])
.
20. Podemos ter várias classes públicas em um arquivo de origem java?
Não podemos ter mais de uma classe pública em um único arquivo de origem java. Um único arquivo de origem pode ter várias classes que não são públicas.
21. O que é um Pacote Java e qual pacote é importado por padrão?
O pacote Java é o mecanismo para organizar as classes java agrupando-as. A lógica de agrupamento pode ser baseada em funcionalidade ou módulos. O nome totalmente classificado de uma classe java contém o pacote e o nome da classe. Por exemplo, java.lang.Object
é o nome totalmente classificado da classe Object
que faz parte do pacote java.lang
.
O pacote java.lang
é importado por padrão e não precisamos importar explicitamente nenhuma classe deste pacote.
22. O que são modificadores de acesso em Java?
Java fornece controle de acesso através das palavras-chave modificadores de acesso public, private e protected. Quando nenhum destes é usado, é chamado de modificador de acesso padrão.
A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.
23. O que é uma palavra-chave final?
A palavra-chave final é usada com Classe para garantir que nenhuma outra classe possa estendê-la. Por exemplo, a classe String é final e não podemos estendê-la.
Podemos usar a palavra-chave final com métodos para garantir que as classes filhas não possam sobrescrevê-la.
A palavra-chave final do Java pode ser usada com variáveis para garantir que ela possa ser atribuída apenas uma vez. No entanto, o estado da variável pode ser alterado, por exemplo, podemos atribuir uma variável final a um objeto apenas uma vez, mas as variáveis do objeto podem mudar posteriormente.
As variáveis de interface do Java são por padrão finais e estáticas.
24. O que é uma palavra-chave static?
A palavra-chave static pode ser usada com variáveis de nível de classe para torná-la global, ou seja, todos os objetos compartilharão a mesma variável.
Podemos usar a palavra-chave static também com métodos. Um método estático pode acessar apenas variáveis estáticas da classe e invocar apenas métodos estáticos da classe.
Leia mais detalhes em java palavra-chave estática.
25. O que é finally e finalize em java?
O bloco finally é usado com try-catch para colocar o código que você deseja que seja executado sempre, mesmo se uma exceção for lançada pelo bloco try-catch. O bloco finally é geralmente usado para liberar recursos criados no bloco try.
O finalize() é um método especial na classe Object que podemos sobrescrever em nossas classes. Este método é chamado pelo coletor de lixo quando o objeto está sendo coletado pelo lixo. Este método é geralmente sobrescrito para liberar recursos do sistema quando o objeto é coletado pelo lixo.
26. Podemos declarar uma classe como estática?
Não podemos declarar uma classe de nível superior como estática, no entanto, uma classe interna pode ser declarada como estática. Se a classe interna for declarada como estática, ela é chamada de classe aninhada estática.
A classe aninhada estática é a mesma que qualquer outra classe de nível superior e é aninhada apenas por conveniência de empacotamento.
Leia mais sobre classes internas em java classe interna.
27. O que é importação estática?
Se precisarmos usar qualquer variável estática ou método de outra classe, geralmente importamos a classe e então usamos o método/variável com o nome da classe.
Podemos fazer a mesma coisa importando apenas o método estático ou variável e então usá-lo na classe como se pertencesse a ela.
O uso da importação estática pode causar confusão, então é melhor evitá-lo. O uso excessivo da importação estática pode tornar seu programa ilegível e de difícil manutenção.
28. O que é try-with-resources em java?
Uma das características do Java 7 é a instrução try-with-resources para gerenciamento automático de recursos. Antes do Java 7, não havia gerenciamento automático de recursos e devíamos fechar explicitamente o recurso. Geralmente, isso era feito no bloco finally
de uma instrução try-catch. Essa abordagem costumava causar vazamentos de memória quando esquecíamos de fechar o recurso.
A partir do Java 7, podemos criar recursos dentro do bloco try e usá-lo. O Java se encarrega de fechá-lo assim que o bloco try-catch for concluído. Leia mais em Gerenciamento Automático de Recursos em Java.
29. O que é um bloco de captura múltipla em java?
Uma das melhorias do Java 7 foi o bloco de captura múltipla, onde podemos capturar várias exceções em um único bloco catch. Isso torna nosso código mais curto e limpo quando cada bloco catch tem um código semelhante.
Se um bloco catch manipula várias exceções, você pode separá-las usando um pipe (|) e, nesse caso, o parâmetro de exceção (ex) é final, então você não pode alterá-lo.
Leia mais em Bloco de captura múltipla em Java.
30. O que é um bloco estático?
O bloco estático Java é o grupo de instruções que é executado quando a classe é carregada na memória pelo ClassLoader Java. É usado para inicializar variáveis estáticas da classe. Na maioria das vezes, é usado para criar recursos estáticos quando a classe é carregada.
31. O que é uma interface?
As interfaces são conceitos centrais da linguagem de programação Java e são amplamente utilizadas não apenas no JDK, mas também em padrões de design Java, na maioria dos frameworks e ferramentas. As interfaces fornecem uma maneira de alcançar abstração em Java e são usadas para definir o contrato para as subclasses implementarem.
Interfaces são boas para definir um ponto de partida para criar Tipo e criar uma hierarquia de nível superior em nosso código. Como uma classe Java pode implementar várias interfaces, é melhor usar interfaces como superclasse na maioria dos casos. Saiba mais em java interface.
32. O que é uma classe abstrata?
Classes abstratas são usadas em Java para criar uma classe com alguma implementação de método padrão para subclasses. Uma classe abstrata pode ter um método abstrato sem o corpo e pode ter métodos com implementação também.
A palavra-chave abstract é usada para criar uma classe abstrata. As classes abstratas não podem ser instanciadas e são principalmente usadas para fornecer uma base para subclasses estenderem e implementarem os métodos abstratos e sobrescreverem ou usarem os métodos implementados na classe abstrata. Leia pontos importantes sobre classes abstratas em java abstract class.
33. Qual é a diferença entre classe abstrata e interface?
- A palavra-chave abstract é usada para criar uma classe abstrata, enquanto interface é a palavra-chave para interfaces.
- As classes abstratas podem ter implementações de método, enquanto interfaces não podem.
- A class can extend only one abstract class but it can implement multiple interfaces.
- Podemos executar uma classe abstrata se ela tiver um método main(), enquanto não podemos executar uma interface.
Algumas outras diferenças em detalhes estão em Diferença entre Classe Abstrata e Interface.
34. Uma interface pode implementar ou estender outra interface?
Interfaces não implementam outra interface, elas estendem. Como interfaces não podem ter implementações de método, não há problema de diamante. É por isso que temos múltiplas heranças em interfaces, ou seja, uma interface pode estender várias interfaces.
A partir do Java 8, as interfaces podem ter implementações de método padrão. Portanto, para lidar com o problema de diamante quando um método padrão comum está presente em várias interfaces, é obrigatório fornecer a implementação do método na classe que as implementa. Para mais detalhes com exemplos, leia Java 8 mudanças de interface.
35. O que é uma interface marcadora?
A marker interface is an empty interface without any method but used to force some functionality in implementing classes by Java. Some of the well known marker interfaces are Serializable and Cloneable.
36. O que são classes Wrapper?
As classes wrapper Java são a representação de objeto dos oito tipos primitivos em Java. Todas as classes wrapper em Java são imutáveis e finais. O autoboxing e unboxing do Java 5 permitem a conversão fácil entre tipos primitivos e suas classes wrapper correspondentes.
Leia mais em Classes Wrapper em Java.
37. O que é Enum em Java?
Enum foi introduzido no Java 1.5 como um novo tipo cujos campos consistem em um conjunto fixo de constantes. Por exemplo, em Java, podemos criar Direction como um enum com campos fixos como LESTE, OESTE, NORTE, SUL.
enum é a palavra-chave para criar um tipo enum e é semelhante à classe. As constantes do enum são implicitamente estáticas e finais. Leia mais detalhes em java enum.
38. O que são Anotações Java?
As anotações Java fornecem informações sobre o código e não têm efeito direto sobre o código que elas anotam. As anotações foram introduzidas no Java 5. A anotação é metadados sobre o programa incorporados no próprio programa. Pode ser analisado pela ferramenta de análise de anotações ou pelo compilador. Também podemos especificar a disponibilidade da anotação para apenas tempo de compilação ou até tempo de execução. As anotações integradas do Java são @Override, @Deprecated e @SuppressWarnings. Leia mais em java annotations.
39. O que é a API de Reflexão do Java e por que é tão importante?
A API de Reflexão do Java fornece a capacidade de inspecionar e modificar o comportamento em tempo de execução da aplicação Java. Podemos inspecionar uma classe Java, interface, enum e obter detalhes de seus métodos e campos. A API de Reflexão é um tópico avançado e devemos evitá-lo na programação normal. O uso da API de Reflexão pode quebrar o padrão de design, como o padrão Singleton, invocando o construtor privado, ou seja, violando as regras dos modificadores de acesso.
Mesmo que não utilizemos a API de Reflexão em programação normal, é muito importante tê-la. Não podemos ter nenhum framework como Spring, Hibernate ou servidores como Tomcat, JBoss sem a API de Reflexão. Eles invocam os métodos apropriados e instanciam classes através da API de reflexão e a usam muito para outros processamentos. Leia o
Tutorial de Reflexão em Java para obter um conhecimento mais aprofundado da API de reflexão.
40. O que é Composição em Java?
Composição é a técnica de design para implementar o relacionamento has-a em classes. Podemos usar a composição de objetos para reutilização de código.
A composição em Java é alcançada usando variáveis de instância que se referem a outros objetos. O benefício de usar composição é que podemos controlar a visibilidade de outros objetos para classes cliente e reutilizar apenas o que precisamos. Leia mais com exemplos em Composição em Java.
41. Qual é o benefício da Composição sobre a Herança?
Uma das melhores práticas da programação Java é “preferir composição sobre herança”. Algumas das possíveis razões são:
- Qualquer alteração na superclasse pode afetar a subclasse mesmo que não estejamos usando os métodos da superclasse. Por exemplo, se tivermos um método test() na subclasse e alguém introduzir repentinamente um método test() na superclasse, obteremos erros de compilação na subclasse. A composição nunca enfrentará esse problema porque estamos usando apenas os métodos de que precisamos.
- A herança expõe todos os métodos e variáveis da superclasse ao cliente e, se não tivermos controle sobre o design da superclasse, isso pode levar a falhas de segurança. A composição nos permite fornecer acesso restrito aos métodos e, portanto, mais seguro.
- Podemos obter vinculação em tempo de execução na composição, enquanto a herança vincula as classes em tempo de compilação. Portanto, a composição fornece flexibilidade na invocação de métodos.
Você pode ler mais sobre os benefícios da composição sobre a herança em java composition vs inheritance.
42. Como ordenar uma coleção de Objetos personalizados em Java?
Precisamos implementar a interface Comparable para dar suporte à ordenação de objetos personalizados em uma coleção. A interface Comparable possui o método compareTo(T obj), que é usado pelos métodos de ordenação e, ao fornecer a implementação deste método, podemos fornecer uma maneira padrão de ordenar a coleção de objetos personalizados.
No entanto, se você quiser ordenar com base em critérios diferentes, como ordenar uma coleção de Funcionários com base no salário ou idade, então podemos criar instâncias de Comparator e passá-las como metodologia de ordenação. Para mais detalhes, leia Java Comparable e Comparator.
43. O que é uma classe interna em Java?
Podemos definir uma classe dentro de uma classe e elas são chamadas de classes aninhadas. Qualquer classe aninhada não estática é conhecida como classe interna. As classes internas estão associadas ao objeto da classe e podem acessar todas as variáveis e métodos da classe externa. Como as classes internas estão associadas à instância, não podemos ter variáveis estáticas nelas.
Podemos ter uma classe interna local ou uma classe interna anônima dentro de uma classe. Para mais detalhes, leia classe interna em Java.
44. O que é uma classe interna anônima?
A local inner class without a name is known as an anonymous inner class. An anonymous class is defined and instantiated in a single statement. Anonymous inner class always extend a class or implement an interface.
Como uma classe anônima não tem nome, não é possível definir um construtor para uma classe anônima. As classes internas anônimas são acessíveis apenas no ponto onde são definidas.
45. O que é o Classloader em Java?
O Classloader Java é o programa que carrega o programa de código de byte na memória quando queremos acessar qualquer classe. Podemos criar nosso próprio classloader estendendo a classe ClassLoader e substituindo o método loadClass(String name). Saiba mais em java classloader.
46. Quais são os diferentes tipos de classloaders?
Há três tipos de Class Loaders integrados em Java.
- Bootstrap ClassLoader – Carrega classes internas do JDK, normalmente carrega rt.jar e outras classes principais.
- Carregador de Classes de Extensões – Ele carrega classes do diretório de extensões do JDK, geralmente o diretório $JAVA_HOME/lib/ext.
- Carregador de Classes do Sistema – Ele carrega classes do classpath atual que pode ser definido ao chamar um programa usando as opções de linha de comando -cp ou -classpath.
47. O que é operador ternário em Java?
O operador ternário Java é o único operador condicional que recebe três operandos. É uma substituição em uma linha para a instrução if-then-else e é muito usado na programação Java. Podemos usar o operador ternário em condições if-else ou até mesmo em condições switch usando operadores ternários aninhados. Um exemplo pode ser encontrado em operador ternário Java.
48. O que a palavra-chave super faz?
A palavra-chave super pode ser usada para acessar o método da superclasse quando você o substituiu na classe filha.
Podemos usar a palavra-chave super para invocar construtores da superclasse no construtor da classe filha, mas neste caso, deve ser a primeira instrução no método construtor.
O uso da palavra-chave super pode ser visto na implementação da classe filha abaixo.
49. O que é a declaração break e continue?
Podemos usar a declaração break para terminar um loop for, while ou do-while. Podemos usar a declaração break no switch statement para sair do caso switch. Você pode ver o exemplo da declaração break em java break. Podemos usar o break com o rótulo para terminar loops aninhados.
A declaração continue ignora a iteração atual de um loop for, while ou do-while. Podemos usar a declaração continue com o rótulo para pular a iteração atual do loop mais externo.
50. O que é a palavra-chave this em Java?
A palavra-chave this fornece a referência ao objeto atual e é principalmente usada para garantir que as variáveis do objeto sejam utilizadas, não as variáveis locais com o mesmo nome.
Também podemos usar essa palavra-chave para invocar outros construtores a partir de um construtor.
51. O que é um construtor padrão?
Um construtor sem argumentos de uma classe é conhecido como construtor padrão. Quando não definimos nenhum construtor para a classe, o compilador Java cria automaticamente o construtor padrão sem argumentos para a classe. Se houver outros construtores definidos, então o compilador não criará o construtor padrão para nós.
52. Podemos ter um try sem bloco catch?
Sim, podemos ter uma instrução try-finally e, portanto, evitar o bloco catch.
53. O que é Coleta de Lixo?
A Coleta de Lixo é o processo de examinar a memória heap, identificando quais objetos estão em uso e quais não estão, e excluindo os objetos não utilizados. Em Java, o processo de desalocação de memória é tratado automaticamente pelo coletor de lixo.
Podemos executar o coletor de lixo com o código Runtime.getRuntime().gc()
ou usar o método utilitário System.gc()
. Para uma análise detalhada da Memória da Pilha e Coleta de Lixo, por favor leia Java Garbage Collection.
54. O que é Serialização e Desserialização?
Podemos converter um objeto Java em um fluxo, que é chamado de Serialização. Uma vez que um objeto é convertido em fluxo, ele pode ser salvo em arquivo, enviado pela rede ou usado em conexões de soquete.
O objeto deve implementar uma interface Serializable e podemos usar java.io.ObjectOutputStream para escrever objetos em arquivo ou em qualquer objeto OutputStream. Leia mais em Serialização Java.
O processo de converter dados de fluxo criados através da serialização em Objeto é chamado de desserialização. Leia mais em Desserialização Java.
Como executar um arquivo JAR através do prompt de comando?
Pode-se executar um arquivo JAR usando o comando java, mas isso requer a entrada Main-Class no arquivo manifesto do JAR. Main-Class é o ponto de entrada do JAR e é usado pelo comando java para executar a classe. Saiba mais em arquivo JAR Java.
Qual é o uso da classe System?
A classe System do Java é uma das classes principais. Uma das maneiras mais fáceis de registrar informações para depuração é o método System.out.print().
A classe System é final, então não podemos subclassificá-la e substituir seu comportamento por herança. A classe System não fornece nenhum construtor público, então não podemos instanciar essa classe e é por isso que todos os seus métodos são estáticos.
Alguns dos métodos utilitários da classe System são para cópia de array, obtenção do horário atual, leitura de variáveis de ambiente. Leia mais em Classe System do Java.
57. O que é a palavra-chave instanceof?
Podemos usar a palavra-chave instanceof para verificar se um objeto pertence a uma classe ou não. Devemos evitar o seu uso sempre que possível. Um exemplo de uso é:
Como str é do tipo String em tempo de execução, a primeira declaração if avalia como verdadeira e a segunda como falsa.
58. Podemos usar String com switch case?
Uma das características do Java 7 foi a melhoria do switch case para permitir Strings. Portanto, se estiver usando o Java 7 ou uma versão superior, é possível usar String em declarações switch-case. Leia mais em Exemplo de switch-case com String em Java.
59. Java é Pass by Value ou Pass by Reference?
Esta é uma pergunta muito confusa, sabemos que as variáveis de objeto contêm a referência aos objetos no espaço de heap. Quando invocamos qualquer método, uma cópia dessas variáveis é passada e armazenada na memória de pilha do método. Podemos testar qualquer linguagem, seja passagem por referência ou passagem por valor, através de um método de troca genérico simples, para aprender mais leia O Java é Passado por Valor e Não por Referência.
60. Qual é a diferença entre Memória de Heap e de Pilha?
A diferença principal entre a memória de Heap e de Pilha é a seguinte:
- A memória de heap é usada por todas as partes da aplicação, enquanto a memória de pilha é usada apenas por uma thread de execução.
- Sempre que um objeto é criado, ele é sempre armazenado no espaço de heap e a memória de pilha contém a referência a ele. A memória de pilha contém apenas variáveis primitivas locais e variáveis de referência para objetos no espaço de heap.
- O gerenciamento de memória na pilha é feito de forma LIFO, enquanto é mais complexo na memória de heap porque é usada globalmente.
Para uma explicação detalhada com um programa de exemplo, leia Java Heap vs Memória de Pilha.
O compilador Java está armazenado no JDK, JRE ou JVM?
A tarefa do compilador Java é converter o programa Java em bytecode, temos o executável javac
para isso. Portanto, ele deve ser armazenado no JDK, não precisamos dele no JRE e a JVM é apenas as especificações.
62. Qual será a saída dos seguintes programas?
Contexto: método estático na classe
Resposta: O código não irá compilar porque não podemos ter um método de classe Object com a palavra-chave static. Note que a classe Object tem o método toString()
. Você receberá um erro de compilação como “Este método estático não pode ocultar o método de instância de Object”. A razão é que o método estático pertence à classe e, uma vez que cada classe base é um Object, não podemos ter o mesmo método na instância e na classe. Você não obterá esse erro se alterar o nome do método de toString() para algo que não esteja presente na superclasse Object
.
Contexto: invocação de método estático
Resposta: Bem, esta é uma situação estranha. Todos nós já vimos a NullPointerException
quando invocamos um método no objeto que é NULL. Mas aqui este programa funcionará e imprimirá “Test foo chamado”.
O motivo para isso é a otimização de código do compilador Java. Quando o código Java é compilado para produzir o bytecode, ele percebe que foo() é um método estático e deve ser chamado usando a classe. Então ele altera a chamada do método obj.foo()
para Test.foo()
e, portanto, não há NullPointerException
.
I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?
Isso é tudo para perguntas e respostas de entrevistas de Java básico. Vou continuar adicionando mais perguntas à lista, se você achar que eu perdi alguma importante, por favor me avise pelos comentários.
Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers