SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Revisão
OCPJP7
Princípios OO
Questão
Qual afirmação é verdadeira?
A. At line 7 extending the abstract class “Switch” is more appreciate
than implementing the interface “Switchable”
B. At line 7 implementing the interface “Switchable” is more
appreciate than extending the abstract class “Switch”
C. At line 7 implementing the interface or extending the interface won’t
give us any advantage over another.
D. Since the both the interface and the abstract class are abstract,
both of them will provide same flexibility.
E. Implementing or extending will fail this code from compiling.
Dado o código:
Resposta
B é a opção correta. Nesse código tanto a interface quanto a classe abstrata
fornecem a mesma funcionalidade para a classe It, mas implementar a interface é
melhor porque permite a classe It estender outra classe se necessário.
A é incorreta, pois se usarmos a herança de classe não poderemos fazê-lo
novamente na classe It.
C e D estã incorretas, pois nesse caso a interface claramente nos provê mais
flexibilidade do que a classe abstrata.
E é incorreta já que o metodo sw() foi corretamente sobrecarregado na linha 9
Questão
Considere as afirmações
I. Implementing an interface and extending an abstract class provide same functionality and flexibility.
II. We should override all the methods when we extend an abstract class or Implement an interface to a
non abstract class.
III. Interfaces and the abstract classes are same.
Qual está correto? Selecione um:
A. All
B. Only I
C. Only II
D. Only III
E. None
Resposta
E é a resposta correta.
Afirmação I é incorreta. Ao se estender uma classe abstrata, assim como estender
uma classe concreta, não se pode estender outra classe. No entanto ao se
implementar uma interface, pode-se implementar outras além ainda pode
estender uma classe.
Afirmação II é incorreta, uma classe abstrata também pode ter métodos não
abastratos, assim se você estender uma classe abstrata não necessariamente
precisará sobrescrever “todos” os seus métodos.
Afirmação III é incorreta, mesmo se uma interface for 100% abstrata, existem
diferenças entra classes abstratas e interfaces. Uma grande diferença é que
todos os métdos de uma interface são abstratos e publicos por padrão, enquanto
que nas classes abstratas não.
Questão
Selecione um:
A. Does not compile
B. ClassCastException is thrown
C. Prints "super"
D. Prints "sub"
Qual é o resultado de compilar e
executar o código abaixo?
Resposta
D é a resposta correta.
O código demonstra o uso de retorno com covariantes, o tipo de de retorno do
método sendo sobrescrito é um subtipo do tipo de retorno do método sobrescrito.
Aqui o super tipo é uma interface, o que é perfeitamente permitido. O objeto da
classe Second foi designado a uma variável declarada do tipo First. Isso também
é permitido já que a classe Second é uma subclasse de First. Já que o código
compila a opção A está incorreta.
Com a sobrescrita, mesmo que o tipo declarado tenha sido First, o método invocado
foi o da classe Second, assim a saída é “sub”, o que torna as alternativas C
incorreta e D correta.
Questão
Quais das opções são retornos legais do metodo callMe() na classe
Test? Selecione 2
a. X
b. AA
c. B
d. C
Resposta
Opções C e D estão corretas.
O suporte a retorno de tipos covariantes permite sobrescrever um método da super
classe retornando qualquer subtipo do tipo de retorno no método da classe super.
O tipo de retorno declarado nas opções A e B são supertipos do tipo de retorno do
método na classe super, o que não é permitido. Assim as opções A e B estão
incorretas.
Questão
O que acontecerá na tentativa de compilar e executar o código?
Selecione 1
a. Compiles fine and prints "Derived" at runtime
b. Compiler error
c. Compiles fine but no output is produced
d. Compiles fine and prints "Base" at runtime
Resposta
Opção B é a resposta correta.
Quando um objeto da classe Derived é construído no método main, uma chamada
super() é automaticamente feita pelo construtor da classe. No entanto, não existe
um constrututor sem argumentos na classe super, causando um erro de
compilação.
O compilador iria prover um construdor default, se nenhum construtor fosse
declarado na classe. No entanto, nesse caso, a classe base definiu apenas um
construtor com argumento.
Questão
O que acontecerá na tentativa de compilar e executar o código?
Selecione 1
a. Does not compile
b. Prints 0
c. Prints 10
d. Prints 7
Resposta
Opção A é a correta.
O código não compila porque o construtor da classe A está declarado como
privado. Isso cria um problema quando o construtor da subclase faz uma
chamada implícita a super() para chamar o construtor ser argumentos da classe
super quando B é instanciada.
Já que o código não compila, todas as outras opções são incorreta. Se o construtor
de A não fosse privado, a saída seria 7.
Questão
Dado o código. Quais 3 afirmações são verdadeiras?
Selecione 3
A. Runtime exception.
B. The code compiles and the output is 200.
C. If lines 14, 15 and 16 were removed, compilation
would fail.
D. If lines 19, 20 and 21 were removed, compilation
would fail.
E. If lines 14, 15 and 16 were removed, the code
would compile and the output would be 200.
F. If lines 19, 20 and 21 were removed, the code
would compile and the output would be 100.
Resposta
Opções corretas são B, E e F
No código foi definido uma interface Foo. A classe A implementa a interface Foo, a classe A
foi defininida em 2 locais: na linha 14 é definada como uma inner class da classe B,
enquanto que na linha 19 é uma inner class de um método (o que é completamente legal).
Inner class de métodos tem preferência sobre inner classe de classes.
Quando o metodo testFoo() é invocado ele internamente inova o método fubar() e passe um
objeto da classe A como referência. O objeto A passado é um da classe inner do método
testFoo. Assim na execuçãodo métod bar() 200 será printado sem nenhum erro ou alerta,
conforme descrito na opção B.
Caso removêssemos as linhas 14,15 e 16, 200 seriam printado também sem nenhum erro,
como descrito na opção E.
Se removessemos as linhas 19,20 e 21 (a segunda declaração da classe A), a classe inner A
seria chamada e o resultado seria 100, como descrito na oção F.
Assim podemos descartar A, C e D, pois estão incorretas
Questão
Qual é o resultado?
Selecione 1.
a. Compilation succeeds.
b. Compilation fails due to multiple errors.
c. Compilation fails due to an error only on line 20.
d. Compilation fails due to an error only on line 21.
e. Compilation fails due to an error only on line 22.
f. Compilation fails due to an error only on line 12.
Resposta
Opção A está correta.
O código declara corretamente a interface A com o método method1(), essa mesma interface
também declara uma variável do tipo String. B é uma interface vazia, o que também é
permitido. A interface C estende as interfaces A e B (um interface pode estender uma ou
mais interfaces), nessa interface existem 2 métodos, um com a mesma assinatura do
método declarado na interface A.
Já que os métodos de uma interface não possuem corpo, métodos com a mesma assinatura
de métodos de interfaces estendidas podem ser declarados.
Sendo assim o código compila e a opção correta é A.
Questão
Insira código no #1 para que o código compile e execute.
Selecione 2.
A. protected void amethod(int i) throws Exception {}
B. int amethod(float i){return 0;}
C. void amethod(int i) throws RuntimeException {}
D. public int amethod(int i) {return 0;}
Resposta
Opções corretas são B e C.
Para que a sobrecarga seja válida a lista de argumentos do método deve ser diferente, o tipo
de retorno pode ser o mesmo ou não. Assim a opção B é uma sobrecarga válida do método
amethod() de MyClass. O modificar de acesso não faz diferença em sobrecarga.
A opção C é uma sobrescrita válida já que o tipo de retorno e os argumentos batem, nesse
caso o modificador de acesso importa, devendo ser o mesmo ou mais amplo na sobrescrita.
Exceções checadas novas não são permitidas serem lançadas, no entanto exeções não
checadas novas podem ser lançadas.
Opção A não é uma maneira correta de sobrescrita, já que lança uma nova exceção checada
que não foi lançada no metodo original.
Opção D não é uma sobrescrita ou sobrecarga válida já que os argumentos batem e apenas o
tipo de retorno é diferente.
Questão
Quais mudanças deveriam ser feitas no código para reuzir o
overhead de sincronização em um singleton.
Selecione 2.
A. Mark the static variable cache as volatile.
B. Mark the static variable cache as static and volatile.
C. Insert before line 15 the code block : if(cache ==
null) { synchronized(PageCache.class) { // code
from line 15 to 17 } }
D. Nothing can be done to reduce the synchronization
overhead.
Resposta
Opções corretas são A e C.
Neste fragmento de código , há uma classe PageCache que tem um método static final getInstance() e uma variável
cache estática . O construtor padrão da classe PageCache é marcado como privado.
O construtor desta classe não pode ser chamado de uma classe externa , uma vez que é privado. Isso impede que
a instanciação da classe a partir de uma classe externa . Assim, apenas um método estático dentro da classe
pode acessar o construtor da classe .
O método getInstance() serve essa responsabilidade . Quando o método getInstance() é chamado, ele verifica a
variável de cache para ser nulo , se sim, ele instancia -lo , senão ele retornar o objeto que já é referenciado pela
variável de cache. Assim, verifica-se que existe um e somente um objeto que é criado e retornado quando
solicitado. Este tipo de padrão de design é chamado de padrão de projeto Singleton em Java. No entanto,
quando multithreading entra em cena , se dois ou mais segmentos de alguma forma entrar no bloco if no método
getInstance() , haverá duas instâncias do pagecache o que é contraditório com o padrão Singleton .
Então, marcando o método getInstance() como sincronizado garante a segurança do thread como apenas um
segmento será capaz de introduzir o método de cada vez. Mas , esta é uma sobrecarga adicional , uma vez que
diminui a velocidade de execução por cerca de 100 vezes .
Para evitar isto, a variável de cache pode ser marcado como volátil , que garante que o valor de cache é sempre lido
a partir da memória principal quando os segmentos estão envolvidos , e o bloco sincronizado na opção C pode
ser adicionada de modo que a sobrecarga de sincronizar o método é removido . Isso é chamado de bloqueio
duplo marcada. Assim, as opções A e C são as respostas corretas.
Questão
Qual Design Patter é demonstrado no métdo Calendar.
getInstance()?.
Selecione 1.
A. Factory pattern
B. Singleton pattern
C. DAO pattern
D. None of these.
Resposta
A resposta correta é a opção A.
Padrão de projeto de Factory em Java é um padrão no qual uma classe separada tem a responsabilidade de
fornecer entidades no sistema como e quando necessário usando seus métodos expostos .
Em Java , o padrão de projeto de Factory é implementado , separando o código que cria objetos usando palavra-
chave "new" . Este código é movido para uma classe separada e é parte de um novo método . Sempre que é
necessário um objeto desta entidade correspondente, uma instância da classe de fábrica é referenciado eo
método para a criação do objeto é chamado por essa instância . Isto leva a reutilização do código . Além disso, o
princípio Java "abrir para a extensão fechado para modificação" é preservado.
Além disso , o método na Factory é chamada utilizando um objeto da classe Factory . Portanto, este método de
criação do objeto é um método de instância ou seja, um método não -estático. Isto é útil quando é necessário um
código de criação de objeto personalizado . Nesse caso, o método pode ser substituído pela classe estendendo
a classe Factory e correspondente código personalizado podem ser adicionados conforme a necessidade .
Calendar é uma classe abstrata e getInstance() é um método estático dentro desta classe. Assim, quando
chamamos Calendar.getInstance () , o novo calendário objeto é criado , cuja implementação real é dada por uma
de suas subclasses , como GregorianCalendar . Este tipo de comportamento representa o padrão de Abstract
Factory. Portanto, a resposta é A.
Questão
Que seguinte retratam o padrão de fábrica?
Selecione 2.
A. StringBuilder.append()
B. DriverManager.getConnection()
C. Runtime.getRuntime()
D. Integer.valueOf(String)
Resposta
As respostas corretas são opção B e D.
Padrão de projeto de Factory em Java é um padrão no qual uma classe separada tem a
responsabilidade de fornecer dedicado entidades no sistema como e quando necessário
usando seus métodos expostos .
Método DriverManager.getConnection retorna um objeto do tipo Connection , que é uma
interface. Assim, o tipo de objeto retornado depende da implementação da API JDBC.
Então, essa API implementa projeto Abstract Factory . Além disso, Integer.valueOf (String)
também leva o valor da String passada para ele e retorna um novo objeto Integer com este
valor. Isto é porque os objetos inteiros são imutáveis ​​ou seja , não podem ser alterados .
Assim , B e D são respostas corretas.
StringBuilder.Append implementa o padrão de projeto Builder enquanto Runtime.getRuntime
implementa o padrão de projeto Singleton. Então, A e C também não são respostas válidas
.
Questão
Qual afirmação é verdadeira sobre as classes e interfaces ao lado?
Selecione 1.
a. Compilation will succeed for all classes and
interfaces.
b. Compilation of class C will fail because of an error
in line 2.
c. Compilation of class C will fail because of an error
in line 6.
d. Compilation of class AImpl will fail because of an
error in line 2.
Resposta
A resposta correta é a opção C.
Em determinado trecho de código da classe C está estendendo a classe B e definir dois
métodos doit () e execute (). Em determinada classe código AImpl implementa corretamente
interface A, para que possamos dizer que Aimpl é do tipo A e pode ser usado no lugar onde
é exigido objeto do tipo A.
Aqui Aimpl é usado como tipo em vez de A. Já que Aimpl implementa com sucesso interface A
ele pode ser usado. Isso, é um exemplo válido de método de sobrescrito.
Mas, enquanto define o metodo execute() a classe C define como um tipo de objeto em vez de
String no retorno, conforme definido na classe B. As Object é super classe de String ele não
pode ser usado como tipo de retorno em um sobrescrita. Também uma classe não pode ter
método com mesmo nome na superclasse com apenas diferente tipo de retorno. Assim, a
classe C não pode definir método execute() com o tipo de retorno Object. Isso vai causar
um erro de compilação como descrito na opção C.

Contenu connexe

Tendances (13)

5423 c ou c++
5423 c ou c++5423 c ou c++
5423 c ou c++
 
Final e aastract
Final e aastractFinal e aastract
Final e aastract
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Linguagem c parte 1
Linguagem c parte 1Linguagem c parte 1
Linguagem c parte 1
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
 
Microprocessadores ii revisão de linguagem de programação (parte2)
Microprocessadores ii revisão de linguagem de programação (parte2)Microprocessadores ii revisão de linguagem de programação (parte2)
Microprocessadores ii revisão de linguagem de programação (parte2)
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Linguagem c parte 2
Linguagem c parte 2Linguagem c parte 2
Linguagem c parte 2
 
Aula 1 2
Aula 1 2Aula 1 2
Aula 1 2
 
Cet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C IntroducaoCet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C Introducao
 
Canais Síncronos
Canais SíncronosCanais Síncronos
Canais Síncronos
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 

Similaire à Revisao OCPJP - Princípios OO

Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8
PeslPinguim
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
Armando Daniel
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
biandamakengo08
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
Infogenius
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
Denis L Presciliano
 

Similaire à Revisao OCPJP - Princípios OO (20)

Aprendendo C# do zero
Aprendendo C# do zeroAprendendo C# do zero
Aprendendo C# do zero
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Java5
Java5Java5
Java5
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
Workshop de Certificação Java - Onixlab
Workshop de Certificação Java - OnixlabWorkshop de Certificação Java - Onixlab
Workshop de Certificação Java - Onixlab
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
10 heranca
10   heranca10   heranca
10 heranca
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
Questesdetecnologia ano2003
Questesdetecnologia ano2003Questesdetecnologia ano2003
Questesdetecnologia ano2003
 
Java11
Java11Java11
Java11
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Revisão OCPJP7 - Class Design (parte 04)
Revisão OCPJP7 - Class Design (parte 04)Revisão OCPJP7 - Class Design (parte 04)
Revisão OCPJP7 - Class Design (parte 04)
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 

Plus de Julio Cesar Nunes de Souza (7)

Introdução AngularJS 4 com CLI
Introdução AngularJS 4 com CLIIntrodução AngularJS 4 com CLI
Introdução AngularJS 4 com CLI
 
Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7
 
"Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de...
 "Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de... "Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de...
"Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de...
 
Revisão OCPJP7 - String Processing
Revisão OCPJP7 - String ProcessingRevisão OCPJP7 - String Processing
Revisão OCPJP7 - String Processing
 
Revisão OCPJP7 - Class Design (parte 02)
Revisão OCPJP7 - Class Design (parte 02) Revisão OCPJP7 - Class Design (parte 02)
Revisão OCPJP7 - Class Design (parte 02)
 
Revisão OCPJP7 - Class Design (parte 01)
Revisão OCPJP7 - Class Design (parte 01)Revisão OCPJP7 - Class Design (parte 01)
Revisão OCPJP7 - Class Design (parte 01)
 
Revisão OCPJP7 - Class Design (parte 03)
Revisão OCPJP7 - Class Design (parte 03)Revisão OCPJP7 - Class Design (parte 03)
Revisão OCPJP7 - Class Design (parte 03)
 

Revisao OCPJP - Princípios OO

  • 2. Questão Qual afirmação é verdadeira? A. At line 7 extending the abstract class “Switch” is more appreciate than implementing the interface “Switchable” B. At line 7 implementing the interface “Switchable” is more appreciate than extending the abstract class “Switch” C. At line 7 implementing the interface or extending the interface won’t give us any advantage over another. D. Since the both the interface and the abstract class are abstract, both of them will provide same flexibility. E. Implementing or extending will fail this code from compiling. Dado o código:
  • 3. Resposta B é a opção correta. Nesse código tanto a interface quanto a classe abstrata fornecem a mesma funcionalidade para a classe It, mas implementar a interface é melhor porque permite a classe It estender outra classe se necessário. A é incorreta, pois se usarmos a herança de classe não poderemos fazê-lo novamente na classe It. C e D estã incorretas, pois nesse caso a interface claramente nos provê mais flexibilidade do que a classe abstrata. E é incorreta já que o metodo sw() foi corretamente sobrecarregado na linha 9
  • 4. Questão Considere as afirmações I. Implementing an interface and extending an abstract class provide same functionality and flexibility. II. We should override all the methods when we extend an abstract class or Implement an interface to a non abstract class. III. Interfaces and the abstract classes are same. Qual está correto? Selecione um: A. All B. Only I C. Only II D. Only III E. None
  • 5. Resposta E é a resposta correta. Afirmação I é incorreta. Ao se estender uma classe abstrata, assim como estender uma classe concreta, não se pode estender outra classe. No entanto ao se implementar uma interface, pode-se implementar outras além ainda pode estender uma classe. Afirmação II é incorreta, uma classe abstrata também pode ter métodos não abastratos, assim se você estender uma classe abstrata não necessariamente precisará sobrescrever “todos” os seus métodos. Afirmação III é incorreta, mesmo se uma interface for 100% abstrata, existem diferenças entra classes abstratas e interfaces. Uma grande diferença é que todos os métdos de uma interface são abstratos e publicos por padrão, enquanto que nas classes abstratas não.
  • 6. Questão Selecione um: A. Does not compile B. ClassCastException is thrown C. Prints "super" D. Prints "sub" Qual é o resultado de compilar e executar o código abaixo?
  • 7. Resposta D é a resposta correta. O código demonstra o uso de retorno com covariantes, o tipo de de retorno do método sendo sobrescrito é um subtipo do tipo de retorno do método sobrescrito. Aqui o super tipo é uma interface, o que é perfeitamente permitido. O objeto da classe Second foi designado a uma variável declarada do tipo First. Isso também é permitido já que a classe Second é uma subclasse de First. Já que o código compila a opção A está incorreta. Com a sobrescrita, mesmo que o tipo declarado tenha sido First, o método invocado foi o da classe Second, assim a saída é “sub”, o que torna as alternativas C incorreta e D correta.
  • 8. Questão Quais das opções são retornos legais do metodo callMe() na classe Test? Selecione 2 a. X b. AA c. B d. C
  • 9. Resposta Opções C e D estão corretas. O suporte a retorno de tipos covariantes permite sobrescrever um método da super classe retornando qualquer subtipo do tipo de retorno no método da classe super. O tipo de retorno declarado nas opções A e B são supertipos do tipo de retorno do método na classe super, o que não é permitido. Assim as opções A e B estão incorretas.
  • 10. Questão O que acontecerá na tentativa de compilar e executar o código? Selecione 1 a. Compiles fine and prints "Derived" at runtime b. Compiler error c. Compiles fine but no output is produced d. Compiles fine and prints "Base" at runtime
  • 11. Resposta Opção B é a resposta correta. Quando um objeto da classe Derived é construído no método main, uma chamada super() é automaticamente feita pelo construtor da classe. No entanto, não existe um constrututor sem argumentos na classe super, causando um erro de compilação. O compilador iria prover um construdor default, se nenhum construtor fosse declarado na classe. No entanto, nesse caso, a classe base definiu apenas um construtor com argumento.
  • 12. Questão O que acontecerá na tentativa de compilar e executar o código? Selecione 1 a. Does not compile b. Prints 0 c. Prints 10 d. Prints 7
  • 13. Resposta Opção A é a correta. O código não compila porque o construtor da classe A está declarado como privado. Isso cria um problema quando o construtor da subclase faz uma chamada implícita a super() para chamar o construtor ser argumentos da classe super quando B é instanciada. Já que o código não compila, todas as outras opções são incorreta. Se o construtor de A não fosse privado, a saída seria 7.
  • 14. Questão Dado o código. Quais 3 afirmações são verdadeiras? Selecione 3 A. Runtime exception. B. The code compiles and the output is 200. C. If lines 14, 15 and 16 were removed, compilation would fail. D. If lines 19, 20 and 21 were removed, compilation would fail. E. If lines 14, 15 and 16 were removed, the code would compile and the output would be 200. F. If lines 19, 20 and 21 were removed, the code would compile and the output would be 100.
  • 15. Resposta Opções corretas são B, E e F No código foi definido uma interface Foo. A classe A implementa a interface Foo, a classe A foi defininida em 2 locais: na linha 14 é definada como uma inner class da classe B, enquanto que na linha 19 é uma inner class de um método (o que é completamente legal). Inner class de métodos tem preferência sobre inner classe de classes. Quando o metodo testFoo() é invocado ele internamente inova o método fubar() e passe um objeto da classe A como referência. O objeto A passado é um da classe inner do método testFoo. Assim na execuçãodo métod bar() 200 será printado sem nenhum erro ou alerta, conforme descrito na opção B. Caso removêssemos as linhas 14,15 e 16, 200 seriam printado também sem nenhum erro, como descrito na opção E. Se removessemos as linhas 19,20 e 21 (a segunda declaração da classe A), a classe inner A seria chamada e o resultado seria 100, como descrito na oção F. Assim podemos descartar A, C e D, pois estão incorretas
  • 16. Questão Qual é o resultado? Selecione 1. a. Compilation succeeds. b. Compilation fails due to multiple errors. c. Compilation fails due to an error only on line 20. d. Compilation fails due to an error only on line 21. e. Compilation fails due to an error only on line 22. f. Compilation fails due to an error only on line 12.
  • 17. Resposta Opção A está correta. O código declara corretamente a interface A com o método method1(), essa mesma interface também declara uma variável do tipo String. B é uma interface vazia, o que também é permitido. A interface C estende as interfaces A e B (um interface pode estender uma ou mais interfaces), nessa interface existem 2 métodos, um com a mesma assinatura do método declarado na interface A. Já que os métodos de uma interface não possuem corpo, métodos com a mesma assinatura de métodos de interfaces estendidas podem ser declarados. Sendo assim o código compila e a opção correta é A.
  • 18. Questão Insira código no #1 para que o código compile e execute. Selecione 2. A. protected void amethod(int i) throws Exception {} B. int amethod(float i){return 0;} C. void amethod(int i) throws RuntimeException {} D. public int amethod(int i) {return 0;}
  • 19. Resposta Opções corretas são B e C. Para que a sobrecarga seja válida a lista de argumentos do método deve ser diferente, o tipo de retorno pode ser o mesmo ou não. Assim a opção B é uma sobrecarga válida do método amethod() de MyClass. O modificar de acesso não faz diferença em sobrecarga. A opção C é uma sobrescrita válida já que o tipo de retorno e os argumentos batem, nesse caso o modificador de acesso importa, devendo ser o mesmo ou mais amplo na sobrescrita. Exceções checadas novas não são permitidas serem lançadas, no entanto exeções não checadas novas podem ser lançadas. Opção A não é uma maneira correta de sobrescrita, já que lança uma nova exceção checada que não foi lançada no metodo original. Opção D não é uma sobrescrita ou sobrecarga válida já que os argumentos batem e apenas o tipo de retorno é diferente.
  • 20. Questão Quais mudanças deveriam ser feitas no código para reuzir o overhead de sincronização em um singleton. Selecione 2. A. Mark the static variable cache as volatile. B. Mark the static variable cache as static and volatile. C. Insert before line 15 the code block : if(cache == null) { synchronized(PageCache.class) { // code from line 15 to 17 } } D. Nothing can be done to reduce the synchronization overhead.
  • 21. Resposta Opções corretas são A e C. Neste fragmento de código , há uma classe PageCache que tem um método static final getInstance() e uma variável cache estática . O construtor padrão da classe PageCache é marcado como privado. O construtor desta classe não pode ser chamado de uma classe externa , uma vez que é privado. Isso impede que a instanciação da classe a partir de uma classe externa . Assim, apenas um método estático dentro da classe pode acessar o construtor da classe . O método getInstance() serve essa responsabilidade . Quando o método getInstance() é chamado, ele verifica a variável de cache para ser nulo , se sim, ele instancia -lo , senão ele retornar o objeto que já é referenciado pela variável de cache. Assim, verifica-se que existe um e somente um objeto que é criado e retornado quando solicitado. Este tipo de padrão de design é chamado de padrão de projeto Singleton em Java. No entanto, quando multithreading entra em cena , se dois ou mais segmentos de alguma forma entrar no bloco if no método getInstance() , haverá duas instâncias do pagecache o que é contraditório com o padrão Singleton . Então, marcando o método getInstance() como sincronizado garante a segurança do thread como apenas um segmento será capaz de introduzir o método de cada vez. Mas , esta é uma sobrecarga adicional , uma vez que diminui a velocidade de execução por cerca de 100 vezes . Para evitar isto, a variável de cache pode ser marcado como volátil , que garante que o valor de cache é sempre lido a partir da memória principal quando os segmentos estão envolvidos , e o bloco sincronizado na opção C pode ser adicionada de modo que a sobrecarga de sincronizar o método é removido . Isso é chamado de bloqueio duplo marcada. Assim, as opções A e C são as respostas corretas.
  • 22. Questão Qual Design Patter é demonstrado no métdo Calendar. getInstance()?. Selecione 1. A. Factory pattern B. Singleton pattern C. DAO pattern D. None of these.
  • 23. Resposta A resposta correta é a opção A. Padrão de projeto de Factory em Java é um padrão no qual uma classe separada tem a responsabilidade de fornecer entidades no sistema como e quando necessário usando seus métodos expostos . Em Java , o padrão de projeto de Factory é implementado , separando o código que cria objetos usando palavra- chave "new" . Este código é movido para uma classe separada e é parte de um novo método . Sempre que é necessário um objeto desta entidade correspondente, uma instância da classe de fábrica é referenciado eo método para a criação do objeto é chamado por essa instância . Isto leva a reutilização do código . Além disso, o princípio Java "abrir para a extensão fechado para modificação" é preservado. Além disso , o método na Factory é chamada utilizando um objeto da classe Factory . Portanto, este método de criação do objeto é um método de instância ou seja, um método não -estático. Isto é útil quando é necessário um código de criação de objeto personalizado . Nesse caso, o método pode ser substituído pela classe estendendo a classe Factory e correspondente código personalizado podem ser adicionados conforme a necessidade . Calendar é uma classe abstrata e getInstance() é um método estático dentro desta classe. Assim, quando chamamos Calendar.getInstance () , o novo calendário objeto é criado , cuja implementação real é dada por uma de suas subclasses , como GregorianCalendar . Este tipo de comportamento representa o padrão de Abstract Factory. Portanto, a resposta é A.
  • 24. Questão Que seguinte retratam o padrão de fábrica? Selecione 2. A. StringBuilder.append() B. DriverManager.getConnection() C. Runtime.getRuntime() D. Integer.valueOf(String)
  • 25. Resposta As respostas corretas são opção B e D. Padrão de projeto de Factory em Java é um padrão no qual uma classe separada tem a responsabilidade de fornecer dedicado entidades no sistema como e quando necessário usando seus métodos expostos . Método DriverManager.getConnection retorna um objeto do tipo Connection , que é uma interface. Assim, o tipo de objeto retornado depende da implementação da API JDBC. Então, essa API implementa projeto Abstract Factory . Além disso, Integer.valueOf (String) também leva o valor da String passada para ele e retorna um novo objeto Integer com este valor. Isto é porque os objetos inteiros são imutáveis ​​ou seja , não podem ser alterados . Assim , B e D são respostas corretas. StringBuilder.Append implementa o padrão de projeto Builder enquanto Runtime.getRuntime implementa o padrão de projeto Singleton. Então, A e C também não são respostas válidas .
  • 26. Questão Qual afirmação é verdadeira sobre as classes e interfaces ao lado? Selecione 1. a. Compilation will succeed for all classes and interfaces. b. Compilation of class C will fail because of an error in line 2. c. Compilation of class C will fail because of an error in line 6. d. Compilation of class AImpl will fail because of an error in line 2.
  • 27. Resposta A resposta correta é a opção C. Em determinado trecho de código da classe C está estendendo a classe B e definir dois métodos doit () e execute (). Em determinada classe código AImpl implementa corretamente interface A, para que possamos dizer que Aimpl é do tipo A e pode ser usado no lugar onde é exigido objeto do tipo A. Aqui Aimpl é usado como tipo em vez de A. Já que Aimpl implementa com sucesso interface A ele pode ser usado. Isso, é um exemplo válido de método de sobrescrito. Mas, enquanto define o metodo execute() a classe C define como um tipo de objeto em vez de String no retorno, conforme definido na classe B. As Object é super classe de String ele não pode ser usado como tipo de retorno em um sobrescrita. Também uma classe não pode ter método com mesmo nome na superclasse com apenas diferente tipo de retorno. Assim, a classe C não pode definir método execute() com o tipo de retorno Object. Isso vai causar um erro de compilação como descrito na opção C.